反转整个链表判断一个链表是否为回文结构
时间: 2023-09-19 16:10:27 浏览: 107
判断链表是否为回文链表leetcode-LeetCode-Exercise:只是一个自我练习的leetcode合集
你可以使用迭代或递归的方法来反转整个链表。下面是迭代的方法:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head):
prev = None
curr = head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
```
要判断链表是否为回文结构,可以使用快慢指针的方法找到链表的中点,然后将后半部分反转。比较前半部分和反转后的后半部分是否相等,即可判断是否为回文结构。
```python
def isPalindrome(head):
if not head or not head.next:
return True
# 使用快慢指针找到中点
slow = head
fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
# 反转后半部分链表
second_half = reverseList(slow)
# 比较前半部分和反转后的后半部分是否相等
first_half = head
while second_half:
if first_half.val != second_half.val:
return False
first_half = first_half.next
second_half = second_half.next
return True
```
以上代码中,`reverseList`函数用于反转链表,`isPalindrome`函数用于判断链表是否为回文结构。
阅读全文