如何实现链表的就地合并操作?写出伪代码(用c语言)
时间: 2024-10-25 18:07:10 浏览: 12
链表的就地合并操作可以通过迭代或递归的方式来实现。这里给出一种常见的迭代方法,假设我们有两个头指针`head1`和`head2`,指向已经排好序的链表:
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* mergeTwoLists(ListNode* head1, ListNode* head2) {
// 初始化合并后的链表头结点
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->next = NULL;
// 定义当前指针和临时指针
ListNode* cur = dummy;
ListNode* temp1 = head1;
ListNode* temp2 = head2;
while (temp1 != NULL && temp2 != NULL) {
// 比较当前节点的值,选择较小的添加到新链表中
if (temp1->val <= temp2->val) {
cur->next = temp1;
temp1 = temp1->next;
} else {
cur->next = temp2;
temp2 = temp2->next;
}
// 移动当前指针
cur = cur->next;
}
// 将剩余未处理的链表部分连接到结果链表上
if (temp1 != NULL) {
cur->next = temp1;
} else {
cur->next = temp2;
}
return dummy->next; // 返回合并后的新链表头结点
}
```
阅读全文