Java 深入分析链表面试实例题目

 更新时间:2022年03月23日 08:38:10   作者:K稳重  
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,本篇带你通过两个实例题目来深入探索

链表面试题一

判断链表是否是回文结构。

问题描述:

兄弟们,看图理解什么是链表的回文结构:

回文结构:正着读12 -> 23 ->34,倒着读12->23->34

奇数偶数都可以:

问题分析:

要判断是不是回文结构,那么我们就要遍历链表,一个从前往后走,一个从后往前走,对应的val值要相同,那么我们就必须修改链表的指向,这里就要用到快慢指针帮我们找到中间的节点,从中间节点开始改变指向,指向变更完成之后再开始遍历。

问题讲解:

第一步:为了确保始终能找到我们的链表,定义一个head变量一直指向头节点。

第二步:定义两个变量,开始都指向head,通过快慢指针的方法求出中间节点。

第三步:定义一个cur变量指向中间节点的后面一个节点,让cur变量来修改指向。

第四步:定义一个curNext变量等于cur.Next,防止改变指向后无法找到后面的节点。

代码实现:

  public boolean chkPalindrome(ListNode head) {
        if(head == null) return false;//判断一下链表是不是空,空的话直接返回false
        ListNode fast = head;//快指针fast,初始等于head
        ListNode slow = head;//慢指针slow,初始等于head
        while(fast != null && fast.next != null){//如果链表是奇数,fast.next == null停下,如果链表是偶数fast == null停下
            fast = fast.next.next;//fast走两步
            slow = slow.next;//slow走一步
 
        }
        ListNode cur = slow.next;//cur等于slow的下一个节点
        while(cur != null){//cur不为空开始反转
            ListNode curNext = cur.next;//curNext等于cur的下一个节点
            cur.next = slow;//开始反转
            slow = cur;//反转完了后让slow等于cur
            cur = curNext;//cur再往后走一步。
        }
        while(head != slow){//判断是不是回文结构
            if(head.val != slow.val){//不是回文结构
                return false;
            }
            if(head.next == slow){//偶数链表的情况
                return true;
            }
            head = head.next;
            slow = slow.next;
        }
        return true;
    }

链表面试题二

输入两个链表,找出它们的第一个公共结点。

问题描述:

问题分析:

判断:

1.如果两个链表是相交那么是Y还是X形状?  Y

2.如果两个链表相交,值val域相同还是next域相同?  next域相同

上图就是相交的链表。 

问题讲解:

第一步:先定义两个字节变量分别指向两个链表的头,headA和headB。

第二步:定义两个变量求出两条链表的差值。

第三步:再定义两个字节变量ps和pl分别指向headA和headB。

第四步:让长的链表先走他们的差值步。

第五步:两个链表再一起走。

第六步:当ps=pl的时候就是共同节点了。

代码实现:

 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headB == null || headA == null) return null;//判断其中一条链表的头节点为空就是没有焦点
        ListNode ps = headA;
        ListNode pl = headB;
        int lenA = 0;
        int lenB = 0;
        while(ps != null){求出ps链表的长度
            lenA++;
            ps = ps.next;
        }
        ps = headA;//让ps重新等于头节点
        while(pl != null){求出pl链表的长度
            lenB++;
            pl = pl.next;
        }
        pl = headB;//让pl重新等于头节点
        int len = lenA - lenB;
        if(len < 0){//判断ps长还是pl长
            ps = headB;
            pl = headA;
            len = lenB - lenA;
        }
         while(len != 0)//求两条链表的差值
                ps = ps.next;
                len--;
 
            }
        while(ps != pl){
            
            ps = ps.next;
            pl = pl.next;
        }
        return ps;
    }

到此这篇关于Java 深入分析链表面试实例题目的文章就介绍到这了,更多相关Java 链表 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解jenkins自动部署springboot应用的方法

    详解jenkins自动部署springboot应用的方法

    这篇文章主要介绍了详解jenkins自动部署springboot应用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java删除String中空格的多种解决方法汇总

    Java删除String中空格的多种解决方法汇总

    在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等,下面这篇文章主要给大家介绍了关于Java删除String中空格的多种解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 教你如何精准统计出你的接口

    教你如何精准统计出你的接口"QPS"

    今天小编就为大家分享一篇关于QPS的精准计算方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • 使用java的milo框架访问OPCUA服务的过程

    使用java的milo框架访问OPCUA服务的过程

    这篇文章主要介绍了使用java的milo框架访问OPCUA服务的方法,本次采用KEPServerEX5模拟服务端,使用milo开发的程序作为客户端,具体操作使用过程跟随小编一起看看吧
    2022-01-01
  • java异常(Exception)处理机制详解

    java异常(Exception)处理机制详解

    这篇文章主要介绍了java异常(Exception)处理机制详解的相关资料,主要介绍异常的定义及使用方法,需要的朋友可以参考下
    2017-03-03
  • Java实现快速排序算法的完整示例

    Java实现快速排序算法的完整示例

    这篇文章主要给大家介绍了关于Java实现快速排序算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • idea每次新打开的项目窗口maven都要重新设置问题

    idea每次新打开的项目窗口maven都要重新设置问题

    这篇文章主要介绍了idea每次新打开的项目窗口maven都要重新设置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • IDEA创建Java Web项目的超详细图文教学

    IDEA创建Java Web项目的超详细图文教学

    IDEA是程序员们常用的java集成开发环境,也是被公认为最好用的java开发工具,下面这篇文章主要给大家介绍了关于IDEA创建Java Web项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • ElasticSearch创建后索引修改数据类型方法步骤

    ElasticSearch创建后索引修改数据类型方法步骤

    Elasticsearch存储数据之前需要先创建索引,类似于结构型数据库建库建表,创建索引时定义了每个字段的索引方式和数据类型,这篇文章主要给大家介绍了关于ElasticSearch创建后索引修改数据类型的方法步骤,需要的朋友可以参考下
    2023-09-09
  • SpringCloud Gateway网关功能介绍与使用

    SpringCloud Gateway网关功能介绍与使用

    SpringCloud Gateway 是 Spring Cloud 的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。这篇文章主要介绍了SpringCloud Gateway网关作用,需要的朋友可以参考下
    2022-12-12

最新评论