Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

รายการที่เชื่อมโยง Palindrome ใน Python


สมมติว่าเรามีรายการที่เชื่อมโยง เราต้องตรวจสอบว่าองค์ประกอบรายการกำลังก่อตัวเป็น apalindrome หรือไม่ ดังนั้นหากองค์ประกอบรายการเป็นเหมือน [1,2,3,2,1] นี่คือพาลินโดรม

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • เร็ว :=หัว, ช้า :=หัว, รอบ :=ไม่มีและตั้งค่าสถานะ:=1

  • หากส่วนหัวว่างเปล่าให้คืนค่าเป็น จริง

  • ในขณะที่ fast และ next of fast สามารถใช้ได้

    • ถ้า next of next of fast ใช้ได้ ให้ตั้งค่า flag :=0 และทำลาย loop

    • เร็ว :=ถัดไปของเร็ว

    • temp :=ช้า ช้า :=ถัดจากช้า

    • ถัดไปของ temp :=rev และ rev :=temp

  • เร็ว :=ถัดไปจากช้า และถัดไปของช้า :=rev

  • หากตั้งค่าสถานะไว้ช้า :=ถัดไปช้า

  • ในขณะที่เร็วและช้าไม่ใช่ไม่มี

    • ถ้าค่า fast ไม่เหมือนค่า slow ก็คืนค่า false

    • เร็ว :=ถัดจากเร็ว และช้า :=ถัดจากช้า

  • คืนความจริง

ตัวอย่าง (Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

คลาส ListNode: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) return headclass Solution(object):def isPalindrome(self, head):fast,slow =head,head rev =None แฟล็ก =1 ถ้าไม่ใช่ head:คืนค่า True ในขณะที่ 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 if flag:slow =slow.next while fast and slow:if fast.data !=slow.data:return False fast =fast.next slow =slow.next return Truehead =make_list([1,2,3,2,1])ob1 =Solution()print(ob1.isPalindrome(head)) 

อินพุต

[1,2,3,2,1]

ผลลัพธ์

จริง