234. 回文链表-快慢指针

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了234. 回文链表-快慢指针相关的知识,希望对你有一定的参考价值。

一、题目描述

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true
示例 2:

输入:head = [1,2]
输出:false

二、解题

双指针-快慢指针

使用快慢指针,将慢指针的前半部分就地反转,然后遍历即可。很巧妙的方法

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode() 
 *     ListNode(int val)  this.val = val; 
 *     ListNode(int val, ListNode next)  this.val = val; this.next = next; 
 * 
 */
class Solution 
   public boolean isPalindrome(ListNode head) 
        if (head == null || head.next == null) return true;
        //双指针 快慢指针
        ListNode slow = head,fast = head;
        ListNode pre = head,cur = null;
        while(fast != null && fast.next != null)
            //保存之前的慢节点 原地将前半部分逆序
            pre = slow;
            //更新快慢节点
            slow = slow.next;
            fast = fast.next.next;
            //将前半部分逆序
            pre.next = cur;
            cur = pre;
        
        //判断奇偶 保证从中间节点向两边指向
        if(fast != null)
            slow = slow.next;
        
        while(pre != null && slow != null)
            if(pre.val != slow.val)
                return false;
            
            pre = pre.next;
            slow = slow.next;
        
        return true;
    

以上是关于234. 回文链表-快慢指针的主要内容,如果未能解决你的问题,请参考以下文章

快慢指针和链表原地反转

javaleetcode234. 回文链表

javaleetcode234. 回文链表

234. 回文链表

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

LeetCode 234——回文链表