博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Palindrome Linked List 回文链表
阅读量:5797 次
发布时间:2019-06-18

本文共 1218 字,大约阅读时间需要 4 分钟。

Palindrome Linked List

Given a singly linked list, determine if it is a palindrome.

Follow up: Could you do it in O(n) time and O(1) space?

反转链表

复杂度

时间 O(N) 空间 O(1)

思路

两个指针都从头出发,快指针每次两步,慢指针每次一步,这样快指针的下一个或下下个为空时,慢指针就在链表正中间那个节点了(如果链表有偶数个节点则在靠近头那侧的)。然后我们从慢指针的下一个开始,把后面的链表都反转(Reverse Linked List),然后我们再从头和从尾同时向中间前进,就可以判断该链表是不是回文了。

代码

public class Solution {    public boolean isPalindrome(ListNode head) {        if(head == null || head.next == null) return true;        ListNode fast = head;        ListNode slow = head;        // 寻找中点        while(fast.next != null && fast.next.next != null){            fast = fast.next.next;            slow = slow.next;        }        // 记录第二段链表的第一个节点        ListNode secondHead = slow.next;        ListNode p1 = secondHead;        ListNode p2 = p1.next;        // 将第一段链表的尾巴置空        slow.next = null;        while(p1 != null && p2 != null){            ListNode tmp = p2.next;            p2.next = p1;            p1 = p2;            p2 = tmp;        }        // 将第二段链表的尾巴置空        secondHead.next = null;        // 依次判断        while(p1 != null){            if(head.val != p1.val) return false;            head = head.next;            p1 = p1.next;        }        return true;    }}

转载地址:http://gxsfx.baihongyu.com/

你可能感兴趣的文章
系统版本判断
查看>>
关于Css选择器优先级
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
工厂模式家族
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
Hichart 资料收集
查看>>
C#开发微信门户及应用(12)-使用语音处理
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
数据集成之主数据管理(一)基础概念篇
查看>>
[Vim] 搜索模式(正则表达式)
查看>>
#HTTP协议学习# (二)基本认证
查看>>
Android开发之线性布局详解(布局权重)
查看>>