# LeetCode 234. 回文链表

## 题目

示例 1:

## 解题思路

# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
# tempList = []
# if tempList[:] == tempList[::-1]:
#     return True
# return False
#快慢指针处理，快指针是慢指针两倍，快指针到尽头，慢指针刚好到中间，然后把慢指针之前的反转，然后两边进行对比，要注意奇数偶数的差异
pre = None
ret = True
while right and right.next:
right = right.next.next
#反转链接慢指针所到之处的链接
tempCur = left.next
left.next = pre
pre = left
left = tempCur
#偶数
if right == None:
right = left
left = pre
#奇数
elif right.next == None:
right = left.next
left = pre
while right and left:
if right.val == left.val:
right = right.next
left = left.next
else:
ret = False
break
#恢复反转链接的原状
left = pre
while left:
tempCur = left.next
left.next = pre
pre = left
left = tempCur
return ret

if __name__ == '__main__':
#链表样例
#L1 1->2->3->4->5
l1 = ListNode(1,ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
#L2 1->3->4
l2 = ListNode(1, ListNode(3, ListNode(4)))
ret = Solution().isPalindrome(l1)
print(ret)
# print(ret.val)
# print(ret.next.val)
# print(ret.next.next.val)
# print(ret.next.next.next.val)
# print(ret.next.next.next.next.val)

|
26天前
|

LeetCode第24题两两交换链表中的节点

27 3
|
26天前
|

LeetCode第86题分隔链表

24 2
|
26天前
|

LeetCode第83题删除排序链表中的重复元素

26 2
|
26天前
|

LeetCode第23题合并 K 个升序链表

26 2
|
14天前
|
C++ 索引
leetcode 707.设计链表

22 1
|
26天前
|

LeetCode第92题反转链表 II

44 0
|
26天前
|

LeetCode第21题合并两个有序链表

24 0
|
26天前
|

LeetCode第19题删除链表的倒数第 N 个结点

22 0
|
28天前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
11 1
|
1月前
|

LeetCode初级算法题：环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题：环形链表+排列硬币+合并两个有序数组java解法
40 0

DDNS