请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
题解:如果没有空间复杂度的限制,我们可以用栈来完成操作,使用快慢指针,将前一半放入栈中,然后依次和后一半进行判断。
如果在O(1) 空间复杂度的限制下,我们只能在链表中进行操作,所以可以进行链表的反转,使用快慢指针,将前一部分链表进行反转,这时我们应该判断链表的长度是奇数位还有偶数位,例如:
1->2->2->1和1->2->3->2->1的区别,我们使用快慢指针找到(n+1)/2的位置,进行反转,所以反转之后为第一个为2->1,2->1,第二个是1->2->3,2->1,所以我们要判断奇偶性,在具体代码中有注释。
public class Main {
public static void main(String[] args) {
ListNode h=new ListNode(1);
h.next=new ListNode(2);
h.next.next=new ListNode(2);
h.next.next.next=new ListNode(1);
System.out.println(isPalindrome(h));
}
p