您的位置:首页 > 其它

Palindrome Linked List

2015-08-06 11:27 134 查看
题目链接

思路:

元素一次进栈,然后再依次出栈就是一次反转。

第一次遍历把链表里面的数值都放到一个栈里面。

然后再遍历一次链表,其中每遍历一个元素对比栈顶的元素,如果相等继续算法,不等返回假。

题目的意思是有线性时间和常量空间的算法,我没有想到。看看之后能有什么解决方法。再来补充。

补充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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: