题解 | #链表的回文结构#

链表的回文结构

http://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa

1.首先要想到使用快慢指针找到链表中间的结点,用了一个isOdd变量来判断链表个数的奇偶

2.slow指针在走的时候要使用三指针法把前半段链表逆置

3.最后从slowpre往前,一个从slow往后判断即可

import java.util.*;

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {
        // write code here
        boolean isOdd;
        boolean ans = true;
        ListNode slow = A;   //三指针法逆置前半段链表
        ListNode slowPre = null;
        ListNode slowNext = A;
        ListNode fast = A;
        while (true){
            if (fast == null){  //如果最后是以fast为空离开循环,则是偶数个
                isOdd = false;
                break;
            }
            if (fast.next == null){  //如果最后是以fast.next为空离开循环,则是奇数个
                isOdd = true;
                break;
            }
            fast = fast.next.next;
            slowNext = slow.next;
            slow.next = slowPre;
            slowPre = slow;
            slow = slowNext;
        }
        if (isOdd == true) {   //如果是奇数个,slow往后走一个
            slow = slow.next;
        }
        while(slow != null){
            if (slow.val != slowPre.val){
                ans = false;
            }
            slow = slow.next;
            slowPre = slowPre.next;
        }
        return ans;
    }
}
全部评论

相关推荐

06-11 13:34
门头沟学院 C++
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务