Leetcode234. 回文链表(快慢指针+反转链表)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode234. 回文链表(快慢指针+反转链表)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/palindrome-linked-list/
解题思路
我们可以先用快慢指针找出中心对称点,然后再将后半部分反转,最后再比较是否相同。
代码
class Solution {
public boolean isPalindrome(ListNode head) {
ListNode l1 = head; //慢指针
ListNode l2 = head; //快指针
while(l2 != null && l2.next != null) {
l1 = l1.next; //一次走一步
l2 = l2.next.next; //一次走两步
}
l2 = head; //从头结点开始走
l1 = reverseList(l1); //从反转后的后半部分开始走
while(l1 != null && l1.val == l2.val) { //如果两个值不同或者l1为空就退出
l1 = l1.next;
l2 = l2.next;
}
return l1 == null ? true : false; //l1为空则代表匹配成功
}
public ListNode reverseList(ListNode head) { //反转链表
ListNode next = null, pre = null;
while(head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
以上是关于Leetcode234. 回文链表(快慢指针+反转链表)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 234:Palindrome Linked List