目录
- 前言
- 一、删除链表的倒数第 N 个结点
- 二、两两交换链表中的节点
- 三、旋转链表
- 四、删除排序链表中的重复元素
- 五、删除排序链表中的重复元素 II
- 六、反转链表II
- 七、删除链表中的节点
- 八、奇偶链表
前言
一、删除链表的倒数第 N 个结点
题目:
方法1:找到删除的结点(双指针法)+尾插
提交代码:
提交结果:
思路分析:
本题的基本思路就是先找到倒数第n个结点,然后再遍历原来链表,将不是该节点的其他结点依次尾插进新链表,然后返回新链表的头指针即可。上面这个代码我们将空表和链表中只有一个结点的情况单独进行分析,其实当链表中只有一个结点的时候,上面代码中的常规情况也是可以符合的。上面在遍历比较原来链表中的结点和删除结点的时候需要注意比较的一定只能是结点的指针,而不能是结点中存在的值,因为不同的结点可能存放的值是一样的。
方法2:找到删除的结点(双指针法)+双指针(前后指针)
提交代码:
提交结果:
思路分析:
这个方法是再找到要删除的结点之后,再找到删除结点的前一个结点,然后让前一个结点的next指向删除结点的下一个即可。注意找前一个的时候,prev刚开始是从NULL开始的,因为头结点没有所谓的前一个结点。
二、两两交换链表中的节点
题目:
提交代码:
提交结果:
思路分析:
三、旋转链表
题目:
提交代码:
提交结果:
思路分析:
四、删除排序链表中的重复元素
题目:
提交代码:
提交结果:
思路分析:
五、删除排序链表中的重复元素 II
题目:
提交代码:
提交结果:
思路分析:
六、反转链表II
题目:
提交代码:
提交结果:
思路分析:
七、删除链表中的节点
题目:
提交代码:
提交结果:
思路分析:
这个题没有给我们链表,只是给了我们要删除的结点的指针(地址),那么我们就需要自己假设这个结点是某一个链表在中的结点,那么一般情况下,删除单链表中的结点采取的方法是找到这个删除结点的上一个结点和下一个结点,那么在这个题中,没有给我们链表你,所以这种方法显然是不合适的,那么删除链表中结点的另一个思路是可以转换成删除这个链表的下一个结点,因为题目已经提示,删除的结点不是链表中的最后一个结点,说明删除的结点的下一个还是有结点的,所以我们可以转换成删除这个结点的下一个结点,步骤是先将下一个结点的数据复制到该结点,然后让当前结点的next指针指向下一个结点的下一个结点,从而下一个结点就从原来链表解除了。
八、奇偶链表
题目:
方法1:多指针法+链表分割+链表连接
提交代码:
提交结果:
思路分析:
方法2:标志位法+链表分割+链表连接
提交代码:
提交结果:
思路分析: