-
标签:
链表
双指针
-
难度:
简单
- 题目描述
- 我的解法
【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
- 其他解法
暂略。
网友评论