回文链表 java
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
1.1 利用集合,把链表的值装入到容器中,然后进行对比,比较好理解。
1.2,利用链表的反转,不过在这里是反转一半的链表,然后进行值得比较。
绿色部分:利用两个指针,快慢指针。其中当快指针到达null或者快指针的next指向null时,绿色的循环结束。此时新的链表形成(原链表的前半部分反转形成)。
红色部分:当原链表为偶数个时,此时的fast肯定为null。当原链表的个数为奇数个时,需要使slow往后移动一个位置。明白?
黑色部分:就是进行两个链表值得比较pre.val与slow.val进行比较。