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;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值