回文链表
题目:
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
思路:
原思路:将链表遍历一遍,存入数组,但空间复杂度为O(n)不符合要求
正确思路:用快慢数组找出链表的中间位置,并将后部分反转,进行比较
代码:
public boolean isPalindrome(ListNode head) {
if(head==null||head.next==null)
return true;
ListNode slow = head;
ListNode fast = head.next;
//快慢指针
while((fast!=null) && (fast.next!=null))
{
slow=slow.next;
fast=fast.next.next;
}
ListNode p = reverseList(slow.next);//之前写的反转函数
while(p!=null)
{
if(head.val!=p.val)
return false;
head=head.next;
p=p.next;
}
return true;
}