【Java版oj】链表的回文结构

目录

一、原题再现

二、问题分析

三、完整代码


一、原题再现

链表的回文结构_牛客题霸_牛客网

较难  通过率:30.08%  时间限制:3秒  空间限制:32M

描述

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:

1->2->2->1
返回:true

二、问题分析

        首先我们要了解回文结构是什么,最典型的一个例子是:上海自来水来自海上。

        故而解决这个题目有三步:1、尝试找到链表的中间结点。2、反转其中的一半链表;得到两条链表。3、依次比较两个链表中的每个结点,如果全部相等则返回true,存在不一样就返回false。

         牛客题中有一个注意点,就是它链表的构造方法没有给定无参构造,所以我们在开辟新链表结点时要用有参构造 。即得赋值ListNode fakeHeadHead=new ListNode(-1);而不能ListNode fakeHead=new ListNode();

        关于链表逆置的详细讲法指路☞ http://t.csdn.cn/SHuUq

三、完整代码

import java.util.*;

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
//遍历求结点个数
private int sizeOf(ListNode head){
        int count=0;
        for (ListNode cur=head; cur!=null ;cur=cur.next ) {
            count++;
        }
        return  count;
    }
//求中间结点位置
    private ListNode middleNode(ListNode head){
        int size=sizeOf(head);
        for(int i=0;i

【Java版oj】链表的回文结构_第1张图片


【Java版oj】链表的回文结构_第2张图片

你可能感兴趣的:(我是小小做题酱,链表,java,数据结构,oj,牛客)