这里的remove不是真正的删除,而是将链表结构中的指针断掉,说一下解题思路:
第一个链表位置的确定
首先用两个指针分别指向list1,然后两个指针指向list2
然后根据要删除的链长,让第一个指针先走b-a步
再让两个指针同时向前走,这时两个指针一直间隔b-a步,这里要注意一点:要删除a节点到b节点,移动的步长为a-1,也就是第二个指针指向a节点的前一个节点,同时第一个指针指向b节点
此时,链表1的两个需要断掉的节点位置已经找到
下面寻找链表2的首尾,
首节点很好找到
然后尾节点要通过遍历,这里的结束条件为,下一个节点为空
最后就是交换指针
将链表1中第二个指针的next指向链表2的头
将链表2中的尾指针的next指向链表1中第二个指针的next(因为在前面已经说过了,第二指针其实是在b的位置,next才是要链接的位置)
# 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
"""
p1=p2=list1
l1=l2=list2
# 先走b-a步
for i in range(b-a+1):
p1=p1.next
#两个指针相差b-a步走
#p1停留在a-1步
#p2停留在b步
for j in range(a-1):
p1=p1.next
p2=p2.next
# 第二个链表走到末尾,指向空
while l2.next :
l2=l2.next
# 交换
p2.next=l1
l2.next=p1.next
return list1
各位大佬,多多指正呀!