用c语言设计一个算法将单链表 ha,单链表 hb 合并成 hc,不破坏 ha 和 hb。
时间: 2024-12-22 21:29:59 浏览: 3
为了合并两个单链表ha和hb,你可以使用迭代或递归的方式来实现这个算法,这里我们提供一种迭代的方式:
首先,创建一个新的空链表hc作为结果。
然后,遍历两个链表,每次从头节点开始比较它们的值。选择较小的节点添加到结果链表hc,并更新当前节点指向下一个节点。如果其中一个链表遍历完还没结束,则将另一个链表剩余部分接到hc的尾部。
以下是详细的步骤伪代码:
```cpp
// 定义链表结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* ha, ListNode* hb) {
ListNode dummy(0); // 创建虚拟头节点,用于辅助处理
ListNode* current = &dummy; // 初始化current为虚拟头
while (ha && hb) { // 当两个链表均非空
if (ha->val <= hb->val) {
current->next = ha; // 将较小值的节点链接到当前节点后
ha = ha->next; // 指向下一个ha节点
} else {
current->next = hb;
hb = hb->next;
}
current = current->next; // 更新current指向下个节点
}
// 如果有一个链表已经遍历完,将另一个链表连接到结果链表的尾部
if (ha) {
current->next = ha;
} else {
current->next = hb;
}
return dummy.next; // 返回结果链表的头节点
}
```
阅读全文