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. 回文链表(快慢指针+反转链表)的主要内容,如果未能解决你的问题,请参考以下文章

javaleetcode234. 回文链表

javaleetcode234. 回文链表

LeetCode 234:Palindrome Linked List

LeetCode 234:Palindrome Linked List

234. 回文链表-快慢指针

力扣234. 回文链表 一题五解让你彻底弄懂链表!反转链表法栈法双指针法快慢指针法递归法