c语言将两个升序单链表La和Lb合并成升序单链表Lc 我希望得到: 建立的单链表La为: H->2->5->7->8 建立的单链表Lb为: H->1->3->6->8->10; 将La和Lb合并后的升序单链表Lc为: H->1->2->3->5->6->7->8->10;
时间: 2024-09-30 21:05:19 浏览: 29
在C语言中,合并两个升序的单链表可以采用迭代或递归的方式。这里是一个简单的迭代算法描述:
首先,我们需要定义链表节点结构体,假设包含整数值`val`和指向下一个节点的指针`next`。
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
```
接着,我们可以创建一个函数`mergeLists`来合并两个链表:
```c
ListNode* mergeLists(ListNode* la, ListNode* lb) {
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode)); // 创建虚拟头节点
dummy->next = NULL;
ListNode* current = dummy; // 当前节点
while (la && lb) { // 只要La或Lb还有元素
if (la->val < lb->val) { // 如果La的值小
current->next = la; // 将La的元素添加到链表中
la = la->next;
} else { // 否则
current->next = lb; // 将Lb的元素添加到链表中
lb = lb->next;
}
current = current->next; // 移动当前节点
}
// 添加剩余的链表元素(如果有一个链表未遍历完)
if (la) {
current->next = la;
} else if (lb) {
current->next = lb;
}
return dummy->next; // 返回新的链表头部
}
```
现在你可以用给定的链表`La`和`Lb`作为输入,调用这个函数:
```c
ListNode *la = createList(8, 7, 5, 2); // 创建La
ListNode *lb = createList(10, 8, 6, 3, 1); // 创建Lb
ListNode *lc = mergeLists(la, lb);
// 现在lc就是合并后的升序链表
```
其中`createList`是你需要自己实现的一个函数,用于构造给定值的链表。
阅读全文