Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 회문 연결 목록


연결된 목록이 있다고 가정합니다. 목록 요소가 회문을 형성하는지 여부를 확인해야 합니다. 따라서 목록 요소가 [1,2,3,2,1]과 같으면 회문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • fast :=head, slow :=head, rev :=None 및 flag :=1

  • 머리가 비어 있으면 true를 반환합니다.

  • fast 및 다음 fast를 사용할 수 있습니다.

    • 다음 fast가 사용 가능하면 flag :=0을 설정하고 루프를 끊습니다.

    • fast :=fast의 다음

    • temp :=느림, 느림 :=다음 느림

    • 다음 temp :=rev 및 rev :=temp

  • 빠름 :=느림 다음, 느림 다음 :=rev

  • 플래그가 설정되어 있으면 느린 :=느린 다음

  • 빠르고 느린 것은 None이 아닙니다.

    • fast의 값이 slow의 값과 같지 않으면 false를 반환합니다.

    • 빠름 :=빠름 다음으로, 느림 :=느림으로

  • true를 반환

예제(파이썬)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class ListNode:def __init__(self, data, next =None):self.data =data self.next =nextdef make_list(elements):head =Elements[1:]의 요소에 대한 ListNode(elements[0]) :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 flag =1 헤드가 아닌 경우:빠르고 빠른 동안 True 반환 (fast.val) fast =slow.next slow.next =rev if flag:slow =slow.next 동안 빠르고 느린 경우:fast.data !=slow.data:False를 반환 fast =fast.next slow =slow.next 반환 Truehead =make_list([1,2,3,2,1])ob1 =Solution()print(ob1.isPalindrome(head)) 

입력

[1,2,3,2,1]

출력

사실