我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java链表面试题有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java链表面试题有哪些

这篇文章主要为大家展示了“Java链表面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java链表面试题有哪些”这篇文章吧。

第一题

题目:反转一个单链表

每个节点是不变的,只是修改当前每个节点的指向

看图分析:

Java链表面试题有哪些

问题分析:

每个节点是不变的,只需要修改当前每个节点的指向,第一个节点指向变成null,第二个节点的指向是第一个节点。

问题讲解:

我们需要定义四个节点变量

head变量等于头节点

cur = head

prev = null

curNext = cur.next

curNext = cur.next

cur.next = prev

prev = cur

cur = curNext

我们看一下图解是如何走的

Java链表面试题有哪些

curNext = cur.next

Java链表面试题有哪些

cur.next = prev

Java链表面试题有哪些

 prev = cur

Java链表面试题有哪些

 cur = curNext

Java链表面试题有哪些

这四步让它是一个循环,我们再走一个循环给大家看

 curNext = cur.next

Java链表面试题有哪些

 cur.next = prev

Java链表面试题有哪些

 prev = cur

Java链表面试题有哪些

 cur = curNext

Java链表面试题有哪些

这样两个循环下来我想大家看的就很明白了,那既然是循环肯定会有终止条件,所以我们可以看一下,当cur走到最后一个字节的时候,我们仍然需要 cur.next =  prev,再往后走的话cur就为null了,为null的时候就反转结束了。所以我们循环的终止条件就是cur != null。另外我们还需要判断一直指向头节点的head为不为null,如果为null的话就是没有这个链表,直接返回null就可以了。反转完成后最后一个节点就变成了头节点,所以我们返回prev就可以了、那我们就可以来写代码了。

代码实现:

lass Solution {    public ListNode reverseList(ListNode head) {         if (head == null) {            return null;        }        ListNode cur = head;        ListNode prev = null;         while (cur != null) {            ListNode cutNext = cur.next;            cur.next = prev;            prev = cur;            cur = cutNext;        }        return prev;     }}

力扣

https://leetcode-cn.com/problems/reverse-linked-list/description/

题目链接在上面,大家一定打开链接自己做一下。

第二题

题目:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 

画图分析:

Java链表面试题有哪些

 问题分析:奇数的话返回中间的节点,偶数的话返回第二个中间节点,也就是说偶数返回第三个。

问题讲解:

同样的,我们来定义两个引用变量

fast,slow两个引用变量都等于head头节点

如图:

Java链表面试题有哪些

我们让fast一次走两步,slow一次走两步,奇数情况:fast.next为null,slow所在的就是中间节点位置 。偶数情况:fast为null,low所在的就是中间节点位置 。原因是为什么呢?两个同时走,fast的速度是slow的两倍,那么路程也是两倍,一个走到终点了,那么另一个就是走了路程的一半。有这样的思路我们就可以来写代码了 ,同样的先要判断一下链表是不是为null,为null直接返回null就好了

代码实现:

class Solution {    public ListNode middleNode(ListNode head) {        if(head == null){            return null;        }            ListNode fast = head;            ListNode slow = head;            while(fast != null && fast.next != null ){                fast = fast.next.next;                slow = slow.next;            }            return slow;        }  }

力扣

https://leetcode-cn.com/problems/middle-of-the-linked-list/description/

第三题

题目:输入一个链表,输出该链表中倒数第k个结点

画图分析:

Java链表面试题有哪些

问题讲解:

同样的,我们来定义两个引用变量

fast,slow两个引用变量都指向头节点

如图: 

Java链表面试题有哪些

如果我们要找倒数第K个,从第K个到倒数第1个需要走K-1步,所以我们先让fast走K-1步,当走完K-1步,fast指向的是倒数第一个时候,那么slow就是我们要找的倒数第K给,如果fast走完K-1步,fast指向的不是倒数第一个,那么这个时候我们让fast和slow一起往后走,他们始终差了K-1步,当fast 走到倒数第一个的时候,这个时候slow所指向的节点就是我们要找的倒数第K个。这里K我们也要判断一下,如果K<=0 或者 k>链表的长度,我们直接返回null就可以了。

代码实现:

public class Solution {    public ListNode FindKthToTail(ListNode head,int k) {        if(k <= 0 || head == null){            return null;        }        ListNode fast = head;        ListNode slow = head;        while(k-1 != 0){            fast = fast.next;            if(fast == null){                return null;            }            k--;        }        while(fast.next != null){            fast = fast.next;            slow = slow.next;        }        return slow;            }}

链表中倒数第k个结点_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力

Java链表面试题有哪些

https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=2&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

第四题

题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

画图分析:这是我们的两个链表 

Java链表面试题有哪些

 问题讲解:

同样的,先定义两个引用变量headA和headB分别指向两个链表的头节点。

定义一个虚拟节点,假设叫newHead,在定义一个引用变量tmp等于newHead

Java链表面试题有哪些

 首先我们先来比较headA和headB的大小,如果headA.val<headB.val,那么就让tmp.next等于headA

Java链表面试题有哪些

 因为12小,那么就让headA = headA.next,如果后面再找到比12大数字就要放在12的后头,所以我们让tmp = tmp.next,

Java链表面试题有哪些

这个时候再比较headA和headB, 如果headA.val>headB.val,那么就是让tmp.next = headB,再让headB = headB.next,tmp = tmp.next

Java链表面试题有哪些

 这样就构成了我们的一个循环,当headA和headB都不为null的时候我们才能继续循环,当循环结束,要么headA为null,要么headB为null,当headA为null,我们让tmp.next = headB,当headB为null,我们让tmp.next = headA,

代码实现:

lass Solution {    public ListNode mergeTwoLists(ListNode headA, ListNode headB) { ListNode newhead = new ListNode(-1);       ListNode tmp = newhead;       while (headA != null && headB != null) {           if (headA.val < headB.val) {               tmp.next = headA;               headA = headA.next;               tmp = tmp.next;           } else {               tmp.next = headB;               headB = headB.next;               tmp = tmp.next;           }       }           if(headA == null){               tmp.next = headB;           }           if(headB == null){               tmp.next = headA;           }       return newhead.next;     }}

以上是“Java链表面试题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java链表面试题有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java链表面试题有哪些

这篇文章主要为大家展示了“Java链表面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java链表面试题有哪些”这篇文章吧。第一题题目:反转一个单链表每个节点是不变的,只是修改当前每个
2023-06-29

Java中链表题有哪些

这篇文章主要介绍了Java中链表题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。第一题 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中
2023-06-21

java面试题有哪些

这篇文章将为大家详细讲解有关java面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、什么是ARQ协议自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据
2023-06-20

Java main面试题有哪些

本篇内容介绍了“Java main面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、不用main方法如何定义一个类?  不行
2023-06-02

Java RabbitMQ面试题有哪些

这篇文章主要讲解了“Java RabbitMQ面试题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java RabbitMQ面试题有哪些”吧!1.RabbitMQ是什么?RabbitM
2023-06-25

java面试中有哪些基础面试题

这篇“java面试中有哪些基础面试题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java面试中有哪些基础面试题”文章吧。1
2023-06-03

java入门面试题有哪些

这篇文章主要为大家展示了“java入门面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java入门面试题有哪些”这篇文章吧。1. 谈谈你对面向对象的了解? (谈谈你对面向对象和面向过程
2023-06-20

Java基础面试题有哪些

小编给大家分享一下Java基础面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!面试题1:JDK1.8的新特性有哪些?接口的默认和静态方法:Java 8允
2023-06-20

有哪些Java核心面试题

本篇内容主要讲解“有哪些Java核心面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些Java核心面试题”吧!01、请说出 Java 14 版本中更新的重要功能Java 14 发布于 2
2023-06-16

P6级Java面试题有哪些

这篇文章主要介绍了P6级Java面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、String stringBuffer和stringBuilderString:
2023-06-02

Java中有哪些Spring面试题

本篇内容主要讲解“Java中有哪些Spring面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中有哪些Spring面试题”吧!谈谈你对 Spring 的理解?Spring 是一个开源
2023-06-16

Java IO常见面试题有哪些

这篇文章主要为大家展示了“Java IO常见面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java IO常见面试题有哪些”这篇文章吧。1. 什么是IO流?它是一种数据的流从源头流到目
2023-06-19

Java中Mybatis的面试题有哪些

这篇文章给大家分享的是有关Java中Mybatis的面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. MyBatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符替换。 在使用
2023-06-20

java内部类面试题有哪些

这篇文章给大家分享的是有关java内部类面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MV
2023-06-14

Java main方法面试题有哪些

本篇内容主要讲解“Java main方法面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java main方法面试题有哪些”吧!  1.不用main方法如何定义一个类?  不行,没有m
2023-06-02

有哪些常见的java面试题

这篇文章主要介绍“有哪些常见的java面试题”,在日常操作中,相信很多人在有哪些常见的java面试题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些常见的java面试题”的疑惑有所帮助!接下来,请跟着小编
2023-06-20

Java程序员面试题有哪些

这篇文章主要介绍了Java程序员面试题有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java程序员面试题有哪些文章都会有所收获,下面我们一起来看看吧。一、开场白简单的介绍一下自己的工作经历与职责,在校或者
2023-06-16

java中io流面试题有哪些

这篇文章主要介绍了java中io流面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录