1669. 合并两个链表

给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置,请你返回结果链表的头指针。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-in-between-linked-lists

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeInBetween(self, list1, a, b, list2):
"""
:type list1: ListNode
:type a: int
:type b: int
:type list2: ListNode
:rtype: ListNode
"""
#保存链表起始位置
head_node = list1
temp_node = list1
pre_node,post_node = None,None
#根据索引保存欲删除节点的前一个和后一个节点
for i in range(b):
if i == (a-1) :
pre_node = list1
list1 = list1.next
else:
list1 = list1.next
post_node = list1.next
#将list2接入list1
pre_node.next = list2
#从头遍历list1,找到list2的最后一个节点
#这个循环最开始写的是 while temp_node,可是一直无法将后续节点补回list1
#因为需要将最后一个节点的next连接到补回节点中,直接遍历到空节点即使赋值,在原链表中也无法找到后续节点
while temp_node.next:
temp_node = temp_node.next
#将后续节点补入list1
temp_node.next = post_node
return head_node