怎样合并两个链表c语言
时间: 2023-07-03 16:30:08 浏览: 106
在 C 语言中,合并两个链表可以按照以下步骤实现:
1. 定义一个新的链表头结点,用于存放合并后的链表。
2. 遍历两个链表,比较节点的值,将较小的节点加入到新链表中,并将指针指向下一个节点。
3. 如果其中一个链表已经遍历完,直接将另一个链表的剩余部分加入到新链表中。
4. 返回新链表的头结点。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode)); // 定义新的链表头结点
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;
}
tail->next = (l1 ? l1 : l2); // 将剩余部分加入到新链表中
return dummy->next; // 返回新链表的头结点
}
int main() {
// 创建两个有序链表
ListNode* l1 = (ListNode*)malloc(sizeof(ListNode));
ListNode* l2 = (ListNode*)malloc(sizeof(ListNode));
l1->val = 1;
l1->next = (ListNode*)malloc(sizeof(ListNode));
l1->next->val = 2;
l1->next->next = (ListNode*)malloc(sizeof(ListNode));
l1->next->next->val = 4;
l1->next->next->next = NULL;
l2->val = 1;
l2->next = (ListNode*)malloc(sizeof(ListNode));
l2->next->val = 3;
l2->next->next = (ListNode*)malloc(sizeof(ListNode));
l2->next->next->val = 4;
l2->next->next->next = NULL;
// 合并两个链表
ListNode* mergedList = mergeTwoLists(l1, l2);
// 打印合并后的链表
while (mergedList) {
printf("%d ", mergedList->val);
mergedList = mergedList->next;
}
return 0;
}
```
输出结果为:1 1 2 3 4 4
阅读全文