编写一个完整可运行的代码。将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。
时间: 2023-04-10 12:03:56 浏览: 66
以下是完整可运行的代码:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* merge(ListNode* l1, ListNode* l2) {
ListNode *p1 = l1, *p2 = l2;
ListNode *pre = NULL;
while (p1 && p2) {
if (p1->val <= p2->val) {
pre = p1;
p1 = p1->next;
} else {
if (pre) pre->next = p2;
pre = p2;
p2 = p2->next;
pre->next = p1;
}
}
if (!p1) {
if (pre) pre->next = p2;
else l1 = p2;
}
return l1;
}
};
int main() {
ListNode *l1 = new ListNode(1);
l1->next = new ListNode(3);
l1->next->next = new ListNode(5);
ListNode *l2 = new ListNode(2);
l2->next = new ListNode(4);
l2->next->next = new ListNode(6);
Solution s;
ListNode *res = s.merge(l1, l2);
while (res) {
cout << res->val << " ";
res = res->next;
}
cout << endl;
return 0;
}
```
输出结果为:1 2 3 4 5 6。
这个代码使用了双指针的方法,遍历两个链表,比较节点的值,将较小的节点接到结果链表的尾部。最后,如果其中一个链表还有剩余,直接将剩余部分接到结果链表的尾部即可。
阅读全文