将两个递增的有序链表合并为一个递增的有序链表。 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中不允许有重复的数据。用C++程序实现,使用头插法
时间: 2024-09-18 15:14:50 浏览: 27
将两个递增的有序链表合并为一个有序链表,可以采用迭代的方式,每次比较两个链表的当前节点,选择较小的那个添加到新链表,并移动指向下一个节点。以下是使用C++实现这个功能的头插法:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
// 如果其中一个链表还有剩余元素,将其添加到新链表的末尾
if (l1)
tail->next = l1;
else if (l2)
tail->next = l2;
return dummy->next; // 返回合并后的链表头节点
}
```
在这个程序中,我们创建了一个虚拟头节点`dummy`来简化操作,因为我们要保留原链表的结构。然后,我们通过不断比较并插入较小值的节点,直到遍历完其中一个链表。最后返回的是新的头部节点。
阅读全文