思路:
元素一次进栈,然后再依次出栈就是一次反转。
第一次遍历把链表里面的数值都放到一个栈里面。
然后再遍历一次链表,其中每遍历一个元素对比栈顶的元素,如果相等继续算法,不等返回假。
题目的意思是有线性时间和常量空间的算法,我没有想到。看看之后能有什么解决方法。再来补充。
补充1
看了两种方法用常量空间解决的方法。方法一我有点没看懂,但是大约的意思是用xor。然后用类似加密解密的方式来做,不同顺序解密结果不一样。方法二是找到尾节点,和中间节点(找的方法是前面指针向前两个,后面指针向前一个,这样前指针是尾,后指针是中间)然后对后面的一般进行链表逆转之后再从头和中间开始遍历。。。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isPalindrome(ListNode head) {
Stack<Integer> myStack=new Stack<Integer>();
ListNode pointer=head;
while(pointer!=null)
{
myStack.push(pointer.val);
pointer=pointer.next;
}
pointer=head;
while(pointer!=null)
{
if(pointer.val!=myStack.pop())
{
return false;
}
else
{
pointer=pointer.next;
}
}
return true;
}
}
本文介绍了一种使用栈来检测链表是否为回文结构的算法,并探讨了线性时间和常量空间复杂度下的两种解决方案:一种利用异或运算特性,另一种通过找到链表的中点并反转后半部分实现。
203

被折叠的 条评论
为什么被折叠?



