Palindrome Linked List

题目链接

思路:
元素一次进栈,然后再依次出栈就是一次反转。
第一次遍历把链表里面的数值都放到一个栈里面。
然后再遍历一次链表,其中每遍历一个元素对比栈顶的元素,如果相等继续算法,不等返回假。

题目的意思是有线性时间和常量空间的算法,我没有想到。看看之后能有什么解决方法。再来补充。
补充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;
    }
}

你可能感兴趣的:(Palindrome Linked List)