ধরুন আমাদের একটি লিঙ্ক করা তালিকা আছে। তালিকার উপাদানগুলি অ্যাপলিন্ড্রোম তৈরি করছে কিনা তা আমাদের পরীক্ষা করতে হবে। তাই যদি তালিকার উপাদানটি [1,2,3,2,1] এর মত হয়, তাহলে এটি একটি প্যালিনড্রোম।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
fast :=head, slow :=head, rev :=None এবং পতাকা :=1
-
যদি মাথা খালি হয়, তাহলে সত্য ফেরত দিন
-
যখন দ্রুত এবং পরবর্তী ফাস্ট উপলব্ধ
-
যদি পরবর্তী ফাস্টের পরবর্তী উপলভ্য থাকে, তাহলে পতাকা সেট করুন :=0 এবং লুপ ভাঙুন
-
দ্রুত :=পরের রোজার পরের
-
temp :=স্লো, স্লো :=স্লো এর পরের
-
temp :=rev, এবং rev :=temp
এর পরের
-
-
দ্রুত :=ধীরের পরের, এবং ধীরের পরের :=রেভ
-
যদি পতাকা সেট করা থাকে, তাহলে স্লো :=স্লো এর পরের
-
যখন দ্রুত এবং ধীর কোনটি নয়,
-
যদি দ্রুততার মান ধীরগতির মানের সমান না হয়, তাহলে মিথ্যা ফেরত দিন
-
দ্রুত :=দ্রুততার পরের, এবং ধীর :=ধীরের পরের
-
-
প্রত্যাবর্তন সত্য
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
ক্লাস লিস্টনোড:def __init__(self, data, next =None):self.data =data self.next =nextdef make_list(elements):head =ListNode(elements[0]) উপাদানের উপাদানের জন্য[1:] :ptr =head while ptr.next:ptr =ptr.next ptr.next =ListNode(element) হেডক্লাস সমাধান(অবজেক্ট):def isPalindrome(self, head):fast,slow =head,head rev =None flag =1 মাথা না থাকলে:রিটার্ন True while fast এবং fast.next:if not fast.next.next:flag =0 break fast =fast.next.next temp =slow slow =slow.next temp.next =rev rev =temp #print (fast.val) fast =slow.next slow.next =rev যদি পতাকা:slow =slow.next while fast and slow:if fast.data !=slow.data:return False fast =fast.next slow =slow.next রিটার্ন ট্রুহেড =make_list([1,2,3,2,1])ob1 =Solution()print(ob1.isPalindrome(head))ইনপুট
[1,2,3,2,1]আউটপুট
সত্য