67. LeetCode 234. 回文链表

2019-02-18  本文已影响2人  月牙眼的楼下小黑

【step1】先用快慢指针(p2, p3)确定中间节点位置。参考:快慢指针寻找链表中间结点

【step2】用双指针(p1, p2) 对中间节点后的链表进行倒置。参考:LeedCode206. 反转链表

【step3】用双指针(head, p1)分别从头、尾开始检查。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def isPalindrome(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if head == None:
            return True
        p1 = None
        p2, p3 = head, head
        while(p3.next and p3.next.next):
            p2 = p2.next 
            p3 = p3.next.next
        while(p2):
            temp = p2.next
            p2.next = p1
            p1 = p2
            p2 = temp
        while(p1 and head):
            if(p1.val == head.val):
                p1 = p1.next
                head = head.next
            else:
                return False
        return True
            
        

暂略。

上一篇下一篇

猜你喜欢

热点阅读