题解 | #判断一个链表是否为回文结构#

判断一个链表是否为回文结构

https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

// 这里不能采用直接反转比较的方法,因为直接反转会改变整体next结构,导致你想正向反向比较的链表next一致
// 但是我们可以采用只反转后半段来进行判断!!!
public class Solution {
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    public boolean isPail (ListNode head) {

        // 双指针得到中点
        ListNode slow = head;
        ListNode fast = head;

        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
        }

        // slow就是中点,反转,然后将fast设为head,开始判断
        slow = reserve(slow);
        fast = head;

        while(slow != null && fast != null){
            if(fast.val != slow.val){
                return false;
            }
            fast = fast.next;
            slow = slow.next;
        }

        return true;
    }

    // 反转函数
    public ListNode reserve(ListNode head){

        ListNode preNode = null;
        ListNode nextNode = null;

        while(head != null){

            nextNode = head.next;

            head.next = preNode;

            preNode = head;

            head = nextNode;

        }

        return preNode;

    }
}

全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务