c语言本题要求实现一个合并两个有序链表的简单函数mergelists,函数参数list1和list2是用户传入的两个按data升序链接的链表的头指针;函数mergelists将两个链表合并成一个按data升序链接的链表,并返回结果链表的头指针。 链表结点定义如下:
时间: 2024-11-25 15:10:30 浏览: 18
c语言-leetcode 0021-merge-two-sorted-lists.zip
在C语言中,你可以通过创建一个新的链表节点结构,并依次比较`list1`和`list2`中的元素来合并两个已排序的链表。这里是一个简单的步骤描述:
```c
// 链表节点定义
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 合并两个有序链表的函数
ListNode* mergeLists(ListNode* list1, ListNode* list2) {
// 定义一个临时头结点,用于存储合并后的链表
ListNode* mergedList = NULL;
// 如果其中一个链表为空,则直接返回另一个链表作为结果
if (list1 == NULL) return list2;
else if (list2 == NULL) return list1;
// 初始化当前指向两个链表的头部
ListNode* curr1 = list1;
ListNode* curr2 = list2;
// 使用循环遍历,直到有一个链表结束
while (curr1 != NULL && curr2 != NULL) {
// 如果list1的数据小于list2,将其添加到结果链表中
if (curr1->data <= curr2->data) {
if (mergedList == NULL) {
mergedList = curr1; // 初始化新的头节点
} else {
mergedList->next = curr1; // 连接新节点
}
curr1 = curr1->next; // 移动list1指针
} else { // 否则,list2的数据较小
if (mergedList == NULL) {
mergedList = curr2; // 初始化新的头节点
} else {
mergedList->next = curr2; // 连接新节点
}
curr2 = curr2->next; // 移动list2指针
}
}
// 将剩余未处理的部分连接到结果链表
if (curr1 != NULL) {
mergedList->next = curr1;
} else {
mergedList->next = curr2;
}
return mergedList;
}
阅读全文