OJ题-判断一个链表是否是回文结构(牛客网)

题目:
在这里插入图片描述

思路:先找出链表的中间结点,然后将中间结点之后的结点逆置,将逆置后的结点放在一个新链表中,将新链表中的元素与原链表中的元素比较,如果都相同,那就返回true,若有一个不同就返回false

import java.util.*;

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {//快引用走两步,慢引用走一步
    public ListNode getMid(ListNode head){//找出链表的中间结点
        ListNode fast=head;
        ListNode slow=head;
        while(fast!=null){
            fast=fast.next;
            if(fast==null){
                break;
            }
            fast=fast.next;
            slow=slow.next;
        }
        return slow;//中间结点
    }
    public ListNode reverse(ListNode head){//逆置中间结点之后的链表
        ListNode result=null;
        ListNode cur=head;
        while(cur!=null){
            ListNode next=cur.next;
            cur.next=result;
            result=cur;
            cur=next;
        }
        return result;//逆置后的链表
    }
    public boolean chkPalindrome(ListNode A) {
        ListNode mid=getMid(A);//调用找中间那个结点的函数
        ListNode h2=reverse(mid);//调用逆置函数
        ListNode n1=A;
        ListNode n2=h2;
        while(n1!=null&&n2!=null){
            if(n1.val!=n2.val){//不相等返回false
                return false;
            }
            n1=n1.next;
            n2=n2.next;
        }
        return true;//相等返回true
    }
}
发布了61 篇原创文章 · 获赞 3 · 访问量 1205

猜你喜欢

转载自blog.csdn.net/qq_44847147/article/details/104021822