两个单个链接列表,大小为m,r并且希望在第二个链表的头部之后插入第一个链表节点,并且时间复杂度必须为O(1)方法
这对我来说真的是一个令人困扰的难题。 Eatch时间我想到一个解决方案,时间复杂度是O(m + r)
我需要一些提示来解决这个问题。我在这个问题上耗费了无用的精力。
编辑:
让我分享一下到目前为止:
添加第一个列表中的其余节点
成为另一个(n-1)
更新:
您如何看待这个?我问到这里后,我直接受到了启发:)
答案 0 :(得分:4)
如果你有两个单链表并且没有第一个的尾部,那么这只能用于O(n)。如果你有尾巴,你只需指向第二个清单的头部......
编辑:第二个列表头指向第一个列表的头部。保持对第二个列表的第二个节点的引用。迭代第一个列表 - 如果你没有引用尾部的引用,那么这是O(n) - 并且将该点的尾部指向第二个列表的原始第二个元素。
答案 1 :(得分:0)
假设你有这些结构:
提醒自己:目标是:“在第二个链表的头部之后插入第一个链表节点”。
然后你所要做的就是:
// Hook up the end of list1 to the original second element of list2
list1.tail.next = list2.head.next;
// Set the second element of list2 to be the first element of list1
list2.head.next = list1.head;
List2仍然以前的位置结束(尾节点相同)。
你现在list1
有一个“漂浮”的头,这通常是坏消息......但是如果你遍历list1
,你将获得两个原始列表中的所有元素。 ..