用c语言表示将两个有序链表合为一个有序链表
时间: 2024-10-11 08:03:32 浏览: 29
在 C 语言中,合并两个有序链表通常可以使用迭代或递归的方式实现。这里提供一个简单的迭代方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建一个新的节点
ListNode* createNode(int val) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 合并两个有序链表
ListNode* mergeTwoSortedLists(ListNode* l1, ListNode* l2) {
// 初始化空链表作为结果
ListNode* result = NULL;
// 当l1和l2都不为空时
while (l1 != NULL && l2 != NULL) {
// 如果l1的值小于l2,将其添加到结果并将l1向后移动一位
if (l1->val < l2->val) {
if (result == NULL) {
result = l1;
} else {
result->next = l1;
}
l1 = l1->next;
// 否则将l2的值添加到结果并将l2向后移动一位
} else {
if (result == NULL) {
result = l2;
} else {
result->next = l2;
}
l2 = l2->next;
}
}
// 将剩余未处理的链表连接到结果的后面
if (l1 != NULL) {
result->next = l1;
} else if (l2 != NULL) {
result->next = l2;
}
return result;
}
int main() {
// 为了演示,假设你已经创建了两个有序链表,例如:
// l1: 1 -> 3 -> 5
// l2: 2 -> 4 -> 6
// 调用mergeTwoSortedLists函数
ListNode* mergedList = mergeTwoSortedLists(l1, l2);
// 打印合并后的链表
while (mergedList != NULL) {
printf("%d ", mergedList->val);
mergedList = mergedList->next;
}
printf("\n");
return 0;
}
阅读全文