【题】
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例 1: 输入:head = [1,2,2,1] 输出:true
示例 2: 输入:head = [1,2] 输出:false
进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
【分析】
思路1:暴力解决,遍历链表后将数存储在数组中,然后根据数据是否对称去判断,此方法要借助额外数据结构存储数据
思路2:利用快慢指针找到中间节点,再将后半部分链表进行反转,最后将前一部分的值与后一部分反转后的链表值逐一比较即可,这种方法可满足O(n)的时间复杂度和O(1)的空间复杂度
【代码】
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def reverseLinkList(self,head):
if not head:
return None
elif not head.next:
return head
elif not head.next.next: