0
点赞
收藏
分享

微信扫一扫

零基础学java--单链表面试题,超详细思路解析


2.反转一个单链表

如何反转?节点不变,改变节点指向,如图

零基础学java--单链表面试题,超详细思路解析_java 思路做法:只需要修改每个节点的指向,如何改变每个节点的指向?引入一个prev,

让cur.next=prev

prev = cur

cur = cur .next

零基础学java--单链表面试题,超详细思路解析_开发语言_02

 零基础学java--单链表面试题,超详细思路解析_java_03

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

思路做法:引用两个指针,快慢指针,fast和slow,fast一次走两步,slow一次走一步,当fast走到最后的时候,slow就在中间位置!

零基础学java--单链表面试题,超详细思路解析_链表_04

引入指针fast和slow

 零基础学java--单链表面试题,超详细思路解析_java_05

 零基础学java--单链表面试题,超详细思路解析_结点_06

4. 输入一个链表,输出该链表中倒数第k个结点。

思想,做法:引用两个指针,fast和slow,先让fast走k-1布,再让slow和fast一起走!

零基础学java--单链表面试题,超详细思路解析_java_07

 代码零基础学java--单链表面试题,超详细思路解析_链表_08

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

先画两个链表,headA和headB

零基础学java--单链表面试题,超详细思路解析_开发语言_09

做法,思想,首先我们先申请一个虚拟节点(傀儡节点),作用:val12和val13相比较谁小就把他串在这个虚拟节点里面。

 零基础学java--单链表面试题,超详细思路解析_java_10

 零基础学java--单链表面试题,超详细思路解析_后端_11

 代码

零基础学java--单链表面试题,超详细思路解析_开发语言_12

如何创建两个链表并打印

零基础学java--单链表面试题,超详细思路解析_开发语言_13

 结果

零基础学java--单链表面试题,超详细思路解析_java_14

6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。

这道题的思想是,我们有两个区间,把小于x的放一个区间,大于x的放一个区间,再将两个区间拼起来

零基础学java--单链表面试题,超详细思路解析_java_15

 零基础学java--单链表面试题,超详细思路解析_java_16

 代码

零基础学java--单链表面试题,超详细思路解析_链表_17

 零基础学java--单链表面试题,超详细思路解析_java_18

7. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。

零基础学java--单链表面试题,超详细思路解析_java_19

零基础学java--单链表面试题,超详细思路解析_后端_20

代码

零基础学java--单链表面试题,超详细思路解析_结点_21


举报

相关推荐

0 条评论