मान लीजिए कि हमारे पास एक लिंक्ड सूची है। हमें यह जांचना होगा कि सूची के तत्व एपेलिंड्रोम बना रहे हैं या नहीं। तो अगर सूची तत्व [1,2,3,2,1] जैसा है, तो यह एक पैलिंड्रोम है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
तेज:=सिर, धीमा:=सिर, रेव:=कोई नहीं और झंडा:=1
-
यदि सिर खाली है, तो सही लौटें
-
जबकि फास्ट एंड नेक्स्ट ऑफ फास्ट उपलब्ध है
-
यदि अगला उपवास उपलब्ध है, तो ध्वज सेट करें:=0 और लूप तोड़ें
-
उपवास :=अगले उपवास के बाद
-
अस्थायी:=धीमा, धीमा:=धीमा के आगे
-
अस्थायी के आगे:=रेव, और रेव:=अस्थायी
-
-
तेज़ :=धीमे के आगे, और अगले धीमे :=रेव
-
यदि ध्वज सेट है, तो धीमा:=धीमे के आगे
-
जबकि तेज़ और धीमा कोई नहीं है,
-
यदि उपवास का मूल्य धीमे के मूल्य के समान नहीं है, तो झूठी वापसी करें
-
तेज़ :=तेज़ के आगे, और धीमा :=धीमे से अगला
-
-
सही लौटें
उदाहरण (पायथन)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
क्लास लिस्टनोड:def __init__(self, data, next =none):self.data =data self.next =nextdef make_list(elements):head =ListNode(elements[0]) तत्वों में तत्व के लिए [1:] :ptr =सिर जबकि ptr.next:ptr =ptr.next ptr.next =ListNode (तत्व) वापसी हेडक्लास समाधान (वस्तु):def isPalindrome (स्वयं, सिर):तेज, धीमा =सिर, सिर रेव =कोई नहीं ध्वज =1 यदि सिर नहीं है:तेज और तेज होने पर सही लौटें। अगला:यदि तेज नहीं है। अगला। अगला:झंडा =0 तेजी से तोड़ें =तेज। अगला। अगला अस्थायी =धीमा धीमा =धीमा। अगला अस्थायी। अगला =रेव रेव =अस्थायी #प्रिंट (फास्ट.वैल) फास्ट =स्लो। नेक्स्ट स्लो। नेक्स्ट =रेव अगर फ्लैग:स्लो =स्लो। नेक्स्ट जबकि फास्ट एंड स्लो:अगर फास्ट। डेटा! =स्लो। डेटा:रिटर्न फाल्स फास्ट =फास्ट। नेक्स्ट स्लो =स्लो। रिटर्न ट्रूहेड =make_list([1,2,3,2,1])ob1 =Solution()print(ob1.isPalindrome(head))इनपुट
[1,2,3,2,1]आउटपुट
सच