मान लीजिए हमारे पास एक लिंक्ड सूची है। हमें यह जांचना होगा कि सूची के तत्व पैलिंड्रोम बना रहे हैं या नहीं। इसलिए यदि सूची तत्व [5,4,3,4,5] जैसा है, तो यह एक पैलिंड्रोम है, लेकिन [5,4,3,2,1] जैसी सूची पैलिंड्रोम नहीं है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- तेज़:=सिर, धीमा:=सिर, रेव:=कोई नहीं और झंडा:=1
- यदि सिर खाली है, तो सही लौटें
- जबकि फास्ट एंड नेक्स्ट ऑफ फास्ट उपलब्ध है
- यदि अगला उपवास उपलब्ध है, तो ध्वज सेट करें:=0 और लूप तोड़ें
- उपवास :=अगले उपवास के बाद
- अस्थायी:=धीमी, धीमी:=धीमी के आगे
- अगले तापमान:=रेव, और रेव:=अस्थायी
- तेज़:=धीमे के आगे, और धीमे के बाद:=रेव
- यदि ध्वज सेट है, तो धीमा:=धीमे के आगे
- जबकि तेज़ और धीमे कोई नहीं हैं,
- यदि उपवास का मान धीमे के मान के समान नहीं है, तो असत्य लौटाएं
- तेज़:=तेज़ के आगे, और धीमे:=धीमे के आगे
- सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class ListNode: def __init__(self, data, next = None): self.data = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head class Solution(object): def isPalindrome(self, head): fast,slow = head,head rev = None flag = 1 if not head: return True while fast and fast.next: if not fast.next.next: flag = 0 break fast = fast.next.next temp = slow slow = slow.next temp.next = rev rev = temp fast = slow.next slow.next = rev if flag: slow = slow.next while fast and slow: if fast.data != slow.data: return False fast = fast.next slow = slow.next return True head = make_list([5,4,3,4,5]) ob1 = Solution() print(ob1.isPalindrome(head))
इनपुट
[5,4,3,4,5]
आउटपुट
True