234-回文链表

2019-04-18  本文已影响0人  不胖二十斤不改名zz

请判断一个链表是否为回文链表。

示例 1: 输入:1->2       输入:1->2->2->1

    输出:false      输出:true

自己实现使用一个vector,保存每一个值,再判断是不是回文。

代码

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?->原文

要使用O(1)的空间复杂度,我们只能在给出的链表身上做文章。我们首先找到链表的中点,然后将中点后的链表反转,再与前面的节点进行比较。

这里对代码进行一下解释,第一个while循环是通过快慢指针找到链表的中点,慢指针每次走一步,快指针每次走两步,当快指针到达链表结尾时,慢指针即指向链表中点。

第二个while循环是对中点后面的链表部分进行反转,以链表1,2,3,4,4,3,2,1为例,每次对后面链表进行一次调整,具体过程图解如下:

反转过程

得到反转后的链表后,第三个while就不用多说了,循环比较两个链表对应位置元素即可。

上一篇下一篇

猜你喜欢

热点阅读