我正在处理LeetCode问题1669. Merge In Between Linked Lists:
您将获得两个链接列表:分别为n
和m
的list1
和list2
。
删除list1
的节点,从第a
个节点到第b
个节点,并将list2
放在它们的位置。
下图中的蓝色边和节点表示结果:
- 生成结果列表并返回其头部。*
约束条件:
3 <= list1.length <= 10⁴
1 <= a <= b < list1.length - 1
1 <= list2.length <= 10⁴
下面是我的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeInBetween(self, list1: ListNode, a: int, b: int, list2: ListNode) -> ListNode:
slow = fast = list1
temp1 = temp2 = list2
slowslow = fastfast = list1
if slow != a:
slow = slow.next
if slowslow.val != a-1:
slowslow = slowslow.next
if fast != b:
fast = fast.next
fastfast = fast.next
while temp2.next:
temp2 = temp2.next
slowslow.next = temp1
temp2.next = fastfast
return list1
第一个测试用例失败:
输入:
[0,1,2,3,4,5]
3
4
[1000000,1000001,1000002]
我的输出:
[0,1000000,1000001,1000002,2,3,4,5]
预期输出:
[0,1,2,1000000,1000001,1000002,5]
我尝试将slowslow
指针放在a
之前,将fastfast
指针放在b
之后,然后将slowslow
连接到temp1
,将temp2
连接到fastfast
。
但不知何故,这是行不通的。我的尝试有什么问题吗?
我是链表的新手,希望能有一个简单的改变,甚至更简单的替代方法。
1条答案
按热度按时间ac1kyiln1#
一些问题:
slow != a
是始终为False的条件,因为slow
是ListNode
对象,而a
是int
。fast != b
也会出现同样的问题。slowslow.val != a-1
是错误的,因为问题中没有任何内容需要查看列表中的 values。a
是 index,而不是 value。slow
设置为第一个列表的第一个节点或第二个节点。没有循环可以保证slow
会引用索引a
之前的节点。fast
也存在同样的问题。以下是工作代码: