给你一个带头结点的单链表,请你编写函数isPalindrome,判断该链表是否为回文链表。如果是,返回true;否则,返回false。其中函数createList,采用尾插入法创建含有头结点的单链表。
时间: 2024-03-19 17:14:34 浏览: 65
链表-基于Java的单链表基本操作之回文链表判断.zip
好的,我知道了。针对您的问题,我为您提供以下代码实现:
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
if not head or not head.next:
return True
slow = head.next
fast = head.next.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
p2 = slow.next
slow.next = None
p1 = None
while p2:
temp = p2.next
p2.next = p1
p1 = p2
p2 = temp
while p1 and head:
if p1.val != head.val:
return False
p1 = p1.next
head = head.next
return True
def createList(self, data: List[int]) -> ListNode:
head = ListNode(-1)
ptr = head
for i in data:
node = ListNode(i)
ptr.next = node
ptr = ptr.next
return head.next
```
其中,ListNode类表示链表节点,Solution类为主体类,提供了两个方法: createList用于创建带头结点的单链表,isPalindrome用于判断链表是否为回文链表。
使用方法如下:
```python
data = [1,2,3,2,1]
solution = Solution()
head = solution.createList(data)
result = solution.isPalindrome(head)
print(result)
```
其中,data为链表元素列表,即[1,2,3,2,1]。我们首先创建一个Solution对象,然后用createList方法创建一个带头结点的单链表。接着,使用isPalindrome方法判断该链表是否为回文链表,并将结果存放在result变量中。最后,输出result变量即可。
阅读全文