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

2.反转一个单链表

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

 思路做法:只需要修改每个节点的指向,如何改变每个节点的指向?引入一个prev,

让cur.next=prev

prev = cur

cur = cur .next

 

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

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

扫描二维码关注公众号,回复: 13835184 查看本文章

引入指针fast和slow

 

 

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

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

 代码

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

先画两个链表,headA和headB

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

 

 

 代码

如何创建两个链表并打印

 结果

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

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

 

 代码

 

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

代码

猜你喜欢

转载自blog.csdn.net/Biteht/article/details/121517997
今日推荐