判断链表是否为回文链表。
题目来源:https://leetcode.com/problems/palindrome-linked-list
题目难度:Easy
解答1[Java]:
核心思路
把所有元素放到栈中,然后从头开始遍历,和栈中弹出来的元素进行比较。
代码
1 | // need n extra space |
解答2[Java]:
核心思路
快慢指针,不过不是两个指针都从头开始,而是快指针从第一个节点开始,慢指针从第二个节点开始,这样,快指针一次走两步,慢指针一次走一步。当链表长度为奇数的时候,快指针可以走到最后一个,此时,慢指针走向链表右半部分的第一个节点。当链表长度为偶数的时候,快指针可以走到倒数第二个节点,此时慢指针同样走到链表右半部分的第一个节点。此时把链表的右半部分压栈,然后找一个指针指向开头,一个一个比较。
代码
1 | // need n/2 extra space |
解答3[Java]:
核心思路
使用快慢指针法,等到慢指针走到链表的一半时,把链表的右半部分翻转,翻转之后,两个指针,一个从头,一个从尾,同时向中间遍历,相互对比。判断之后先把结果存起来,然后把链表结构恢复,返回结果。
代码
1 | // need O(1) extra space |
完整测试代码
1 | import java.util.Stack; |