您将得到两个排序整数的双链表(按升序排列)。设L和R是这两个双链表的头指针。编写一个算法,将它们合并成一个排序的整数链表。注意:分数将基于(i)你的算法的正确性和(ii)你的算法使用的空间量(例如,你不应该创建一个新的数组来存储数据)。
时间: 2024-09-26 19:03:21 浏览: 35
为了合并两个已排序的双链表 L 和 R,你可以采用归并排序的思想,同时保持链表的特性。首先,创建一个新节点作为合并后的链表的头,然后遍历两个链表。比较 L 和 R 的当前节点值,选择较小的那个节点添加到新链表,并移动相应的链表头指针。当其中一个链表遍历完时,将另一个链表剩余部分直接接到新链表的末尾。
以下是伪代码描述:
```python
def merge_sorted_lists(L, R):
dummy = ListNode(0) # 创建虚拟头节点
current = dummy # 初始化合并后链表头为dummy
while L and R:
if L.val <= R.val:
current.next = L
L = L.next
else:
current.next = R
R = R.next
current = current.next # 移动当前指向下一个节点
if L: # 如果L还有剩余节点
current.next = L
elif R: # 如果R还有剩余节点
current.next = R
return dummy.next # 返回新链表的实际头节点
```
在这个过程中,我们只用了常数级别的额外空间,所以空间复杂度为 O(1),时间复杂度取决于两个链表中最长的一个,因为每个节点都会被访问一次,因此是 O(max(m, n)),其中 m 和 n 分别是 L 和 R 的长度。
阅读全文