链表相关例题

1.翻转链表

链表相关例题_第1张图片

链表相关例题_第2张图片 2.链表的中间节点

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

链表相关例题_第3张图片

链表相关例题_第4张图片

链表相关例题_第5张图片

链表相关例题_第6张图片

 链表相关例题_第7张图片

while的两个条件如果调换了位置,会出现空指针异常。

3.输入一个链表,输出链表中倒数第k个节点 

 链表相关例题_第8张图片

 链表相关例题_第9张图片

链表相关例题_第10张图片 链表相关例题_第11张图片

链表相关例题_第12张图片 但是上面的代码使用了size()函数,还是遍历了一遍链表,改善代码,不用size()函数遍历,得到如下代码:

循环之中:fast边走边判断是否为空 

链表相关例题_第13张图片

 4.按照大小合并两个链表

链表相关例题_第14张图片

链表相关例题_第15张图片

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

链表相关例题_第16张图片

链表相关例题_第17张图片

链表相关例题_第18张图片

链表相关例题_第19张图片

6.链表的回文结构

链表相关例题_第20张图片

 错误的思路:

1.遍历一遍链表,将val值存到数组里面,判断数组里面的数据是不是回文。(错误原因:空间复杂度为O(n)而不是O(1))

2.定义两个指针,一个从头走,一个从尾走(错误原因:单链表,无法两个方向走)

正确思路:

逆置后半段链表,两边头节点向中间走,直到相遇。

步骤:1.找到中间节点,快慢指针

           2.反转中间节点后面的节点

           3.一个从头开始走,一个从尾开始走

链表相关例题_第21张图片 链表相关例题_第22张图片

7.输入两个链表,找出他们的第一个公共节点 

 链表相关例题_第23张图片

 链表相关例题_第24张图片链表相关例题_第25张图片

链表相关例题_第26张图片

 链表相关例题_第27张图片

你可能感兴趣的:(链表,java,数据结构)