用C语言写出一段程序:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
时间: 2023-10-19 19:03:44 浏览: 186
c代码-将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
好的,以下是用C语言实现两个链表合并的代码:
```
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *tail = dummy;
while (l1 != NULL && l2 != NULL) {
if (l1->val <= l2->val) {
tail->next = l1;
l1 = l1->next;
}
else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
tail->next = l1 != NULL ? l1 : l2;
struct ListNode *head = dummy->next;
free(dummy);
return head;
}
int main() {
// example usage
// create two sorted linked lists
struct ListNode *l1 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *l2 = (struct ListNode *)malloc(sizeof(struct ListNode));
l1->val = 1;
l1->next = (struct ListNode *)malloc(sizeof(struct ListNode));
l1->next->val = 2;
l1->next->next = (struct ListNode *)malloc(sizeof(struct ListNode));
l1->next->next->val = 4;
l1->next->next->next = NULL;
l2->val = 1;
l2->next = (struct ListNode *)malloc(sizeof(struct ListNode));
l2->next->val = 3;
l2->next->next = (struct ListNode *)malloc(sizeof(struct ListNode));
l2->next->next->val = 4;
l2->next->next->next = NULL;
// merge the two linked lists
struct ListNode *merged = mergeTwoLists(l1, l2);
// print the merged linked list
while (merged != NULL) {
printf("%d ", merged->val);
merged = merged->next;
}
printf("\n");
return 0;
}
```
这个程序创建了两条升序链表,然后调用 `mergeTwoLists` 函数将它们合并为一条新的升序链表并将其打印出来。
注意,这个程序使用了链表数据结构和动态内存分配。如果你对这些概念不熟悉,可能需要先学习一些相关的基础知识。
阅读全文