给你两个双向链表,其中的整数按升序排序。 让 L 和 R 成为这两个双向链表的头指针。 编写一个算法将它们合并为一个有序整数链表。 注意:分数将根据 (i) 算法的正确性和 (ii) 算法使用的空间量来给出(例如,你不应该创建新数组来存储数据)。
时间: 2024-09-22 12:02:24 浏览: 171
要合并两个升序排列的双向链表 `L` 和 `R` ,可以采用迭代的方式,同时维护两个指针,一个指向 `L` 的当前节点,另一个指向 `R` 的当前节点。如果 `L` 的节点值小于等于 `R` 的节点值,则把 `L` 的节点添加到结果链表中,并移动 `L` 指针;反之,则把 `R` 的节点添加并移动 `R` 指针。当其中一个链表为空时,将另一个链表的所有剩余节点依次添加到结果链表。
以下是 Python 伪代码实现:
```python
# 定义链表节点
class ListNode:
def __init__(self, val=0, prev=None, next=None):
self.val = val
self.prev = prev
self.next = next
def merge_sorted_lists(L, R):
dummy = ListNode(0) # 创建虚拟头节点
current = dummy # 初始化合并后的链表头
while L and R: # 只要两个链表都有节点
if L.val <= R.val:
current.next = L
L.prev = current
current = L
L = L.next
else:
current.next = R
R.prev = current
current = R
R = R.next
# 把剩下的链表连接起来
if L is not None:
current.next = L
L.prev = current
elif R is not None:
current.next = R
R.prev = current
return dummy.next # 返回新的有序链表头部
# 示例:
# L: 1->2->4->5
# R: 1->3->4
# 合并后:1->1->2->3->4->4->5
```
阅读全文