.将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。C语言回复
时间: 2023-07-11 08:29:28 浏览: 118
可以使用指针来遍历两个链表,比较两个链表的当前节点大小,将较小的节点接入新链表中,直到一个链表遍历完毕,再将另一个链表中剩余的节点接入新链表。以下是示例代码:
```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 *newList = (struct ListNode*)malloc(sizeof(struct ListNode));
newList->next = NULL;
struct ListNode *cur = newList;
while (l1 && l2) {
if (l1->val <= l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
cur->next = l1 ? l1 : l2;
return newList->next;
}
int main() {
struct ListNode *l1 = (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;
struct ListNode *l2 = (struct ListNode*)malloc(sizeof(struct ListNode));
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;
struct ListNode *newList = mergeTwoLists(l1, l2);
while (newList) {
printf("%d ", newList->val);
newList = newList->next;
}
return 0;
}
```
输出结果为:1 1 2 3 4 4
阅读全文
相关推荐












