合并两个有序链表不申请额外空间
时间: 2023-12-12 08:05:10 浏览: 85
可以使用双指针的方法来合并两个有序链表,不需要申请额外空间。具体步骤如下:
1. 创建一个新的头节点dummy,用来存储合并后的链表。
2. 使用两个指针p和q分别指向两个链表的头节点。
3. 创建一个指针cur,初始时指向dummy节点。
4. 比较p和q指针所指的节点的值,将较小的节点链接到cur后面,并将cur指针向后移动。
5. 如果p或q其中一个到达了链表的末尾,将另一个链表剩余部分直接链接到cur后面。
6. 返回dummy.next,即为合并后的链表的头节点。
以下是使用Python实现的代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1, l2):
dummy = ListNode() # 创建新的头节点
cur = dummy # 创建指针cur
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
if l1:
cur.next = l1
else:
cur.next = l2
return dummy.next
# 测试示例
l1 = ListNode(1)
l1.next = ListNode(2)
l1.next.next = ListNode(4)
l2 = ListNode(1)
l2.next = ListNode(3)
l2.next.next = ListNode(4)
merged = mergeTwoLists(l1, l2)
while merged:
print(merged.val, end=" ")
merged = merged.next
```
输出结果为:1 1 2 3 4 4
阅读全文