写一段c语言代码来做到合并俩个升序链表
时间: 2023-05-27 15:06:11 浏览: 83
以下是一段合并两个升序链表的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 *mergedList = NULL;
struct ListNode *tail = NULL;
while (l1 && l2) {
if (l1->val < l2->val) {
if (mergedList == NULL) {
mergedList = tail = l1;
} else {
tail->next = l1;
tail = l1;
}
l1 = l1->next;
} else {
if (mergedList == NULL) {
mergedList = tail = l2;
} else {
tail->next = l2;
tail = l2;
}
l2 = l2->next;
}
}
if (l1) {
if (mergedList == NULL) {
mergedList = l1;
} else {
tail->next = l1;
}
} else if (l2) {
if (mergedList == NULL) {
mergedList = l2;
} else {
tail->next = l2;
}
}
return mergedList;
}
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 = 3;
l1->next->next = (struct ListNode*) malloc(sizeof(struct ListNode));
l1->next->next->val = 5;
l1->next->next->next = NULL;
struct ListNode *l2 = (struct ListNode*) malloc(sizeof(struct ListNode));
l2->val = 2;
l2->next = (struct ListNode*) malloc(sizeof(struct ListNode));
l2->next->val = 4;
l2->next->next = (struct ListNode*) malloc(sizeof(struct ListNode));
l2->next->next->val = 6;
l2->next->next->next = NULL;
struct ListNode *mergedList = mergeTwoLists(l1, l2);
while (mergedList) {
printf("%d ", mergedList->val);
mergedList = mergedList->next;
}
return 0;
}
```
这段代码首先定义了一个链表结构体,然后定义了一个函数 `mergeTwoLists` 来合并两个升序链表。函数使用了两个指针 `l1` 和 `l2` 来遍历两个链表,同时使用一个指针 `mergedList` 来指向合并后的链表的头结点。在遍历过程中,如果 `l1` 指向的节点的值小于 `l2` 指向的节点的值,则将 `l1` 指向的节点加入到合并后的链表中,并将 `l1` 向后移动一个节点。否则,将 `l2` 指向的节点加入到合并后的链表中,并将 `l2` 向后移动一个节点。当 `l1` 或 `l2` 遍历到链表的末尾时,将剩余的节点加入到合并后的链表中。最后,返回合并后的链表的头结点。在 `main` 函数中,创建了两个升序链表 `l1` 和 `l2`,然后调用 `mergeTwoLists` 函数将它们合并,并遍历输出合并后的链表的值。
阅读全文