链表相关题_python版
在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
思路:我们要删除结点i,先把i的下一个结点i.next的内容复制到i,然后在把i的指针指向i.next结点的下一个结点即i.next.next,它的效果刚好是把结点i给删除了。需要考虑如果这个节点是链表的尾节点那么就需要从头遍历这个链表了。(通常,在单向链表中,删除一个链表的结点,都会先从表头开始遍历整个链表,找到需要删除的结点的前一个结点,然后将这个结点的(指向下一个结点的)指针元素指向需要删除结点的下一个结点,最后把需要删除的结点删除.但此过程的平均时间复杂度为 O(n). )
1 | class ListNode: |
合并两个排序的链表(要求不新建链表)
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
思路:非递归情况:找到两个链表中头节点值相对更小的链表,将其作为主链表,第二个链表中的元素则不断加入到主链表中。具体策略是:主链表定义两个指针,指向两个相邻的元素。当第二个链表中的元素值小于主链表中第二个指针时,将第二个链表的当前元素插入到主链表两个指针指向的元素中间,并调整指针指向。 不要让链表断开,考虑链表为空的几种情况。
1 | # ============非递归版本=============== |
二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向 ,例如

思路:
- 核心算法依旧是中序遍历
- 不是从根节点开始,而是从中序遍历得到的第一个节点开始
- 定义两个辅助节点listHead(链表头节点)、listTail(链表尾节点)。事实上,二叉树只是换了种形式的链表;listHead用于记录链表的头节点,用于最后算法的返回;listTail用于定位当前需要更改指向的节点。了解了listHead和listTail的作用,代码理解起来至少顺畅80%。
过程图示例

1 | ''' |
翻转部分链表
题目:给定一个单链表的头指针 head, 以及两个整数 a 和 b下标,在单链表中反转 linked_list[a-b] 的结点,然后返回整个链表的头指针 。
思路:采用翻转单链表的思路,回顾一下
1 | ''' |
1 | # 翻转部分链表 |
链表插入排序(leetcode 147 Insertion Sort List)
题目:利用插入排序对链表进行排序
思路:1->3->2->4->null,将头结点和后面的部分断开,变成1->null和3->2->4->null,1->null看做是排好序的部分,添加的时候依次取后面的那部分的节点,比如在这里,先取3,然后对前面排好序的链表从前往后遍历,找到应该插入的位置即可。
1 | """ |
链表归并排序(leetcode 148 Sort List)
题目:要求我们用O(nlogn)算法对链表进行排序
1 | class ListNode(object): |
两两交换链表中相邻的两个元素
题目:交换链表中相邻的两个元素。 注意第一个节点与第二个节点要交换位置,而第二个节点不用与第三个节点交换位置。 如要交换链表中A->B->C->D中的B和C需要做如下操作(交换B和C):
- 将A指向C
- 将B指向D
- 将C指向B
思路:在头节点之前加一个假节点就可以使所有的交换都符合上面的情况。
1 | class Solution(object): |
判断两个链表相交和相交的第一个节点
思路1:链表两个链表的长度差diff,然后快指针先走diff步,然后快慢指针一起走。直到两个指针相同,否则无相交节点。(需要先遍历得到两个链表长度)
思路2:两个指针一起走,当一个指针p1走到终点时,说明p1所在的链表比较短,让p1指向另一个链表的头结点开始走,直到p2走到终点,让p2指向短的链表的头结点,那么,接下来两个指针要走的长度就一样了 ,然后就可以一起走,直到两个指针相同。(若无交点,可以一开始在链表尾巴的设置一个标志点)
1 | # 思路二 |
分隔链表
题目:给定一个链表以及一个目标值,把小于该目标值的所有节点都移至链表的前端,大于或等于目标值的节点移至链表的尾端,同时要保持这两部分在原先链表中的相对位置。
思路:两个链表指针,一个负责收集比目标小的,一个收集大于等于目标的。
1 | class Solution(object): |
重排链表
将单向链表L0→L1→…→Ln-1→Ln转化为L0→Ln→L1→Ln-1→L2→Ln-2→…的形式,也就是从头部取一个节点,从尾部取一个节点,直到将原链表转化成新的链表。
思路:
- 去中间节点,将链表分为两段.
- 翻转后一段
- 拼接
1 | class Solution: |