将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他存储空间。表中不允许有重复的数据。
时间: 2024-11-21 12:07:24 浏览: 9
将两个递增的有序链表合并为一个新的递增有序链表,可以使用迭代或递归的方式。这里提供一种常见的迭代方法,也被称为“归并”过程。假设两个链表分别为`list1`和`list2`,它们的头结点分别是`head1`和`head2`,并且都没有空。
首先,创建一个新的头结点`newHead`,并初始化它的next指针为空。然后设置两个指针`p1 = head1` 和 `p2 = head2` 分别指向各自链表的开始。
接着进入循环,比较`p1`和`p2`所指向的节点值:
1. 如果`p1`的值小于`p2`的值,说明`list1`的当前节点应该先添加到新链表中,所以更新`newHead`的下一个节点为`p1`,并将`p1`向前移动一位;然后检查`p1`是否到达了`list1`的尾部,若未到则继续比较。
2. 否则,如果`p2`的值小于或等于`p1`的值,说明`list2`的当前节点应该先添加,同样更新`newHead`的下一个节点为`p2`,并将`p2`向前移动一位。
当其中一个链表遍历完时,直接将另一个链表剩余的部分连接到新链表的尾部即可。最后返回`newHead`,即为合并后的有序链表。
下面是伪代码表示:
```python
def mergeSortedLists(head1, head2):
newHead = ListNode(0) # 创建新的头节点
tail = newHead
while head1 and head2:
if head1.val < head2.val:
tail.next = head1
head1 = head1.next
else:
tail.next = head2
head2 = head2.next
tail = tail.next
# 添加剩余部分
if head1:
tail.next = head1
elif head2:
tail.next = head2
return newHead
```
阅读全文