链接两个单链表a,b为一个单链表c,用c语言伪代码实现算法
时间: 2024-10-20 08:05:49 浏览: 31
要将两个已排序的单链表`a`和`b`链接成一个新的已排序链表`c`,可以使用迭代的方式结合指针操作。这里提供一个简单的C语言伪代码实现:
```c
// 定义链表节点结构体
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 创建新链表头节点
ListNode* createNewList() {
ListNode* c = malloc(sizeof(ListNode));
if (!c) {
printf("Memory allocation failed.\n");
return NULL;
}
c->data = INT_MIN; // 初始化为最小值,确保排序
c->next = NULL;
return c;
}
// 合并两个链表
ListNode* mergeSortedLists(ListNode* a, ListNode* b) {
ListNode* c = createNewList();
ListNode* current_c = c;
while (a && b) {
// 如果a的元素小于b,添加a并更新指针
if (a->data < b->data) {
current_c->next = a;
a = a->next;
} else { // 否则,添加b并更新指针
current_c->next = b;
b = b->next;
}
// 更新当前节点
current_c = current_c->next;
}
// 将剩余未遍历的链表添加到结果中
if (a) {
current_c->next = a;
} else {
current_c->next = b;
}
return c;
}
```
上述伪代码首先定义了一个链表节点结构,然后创建一个空的新链表`c`。接着,我们通过循环比较`a`和`b`的节点值,将较小的节点添加到新链表中,直到其中一个链表结束。最后将剩余的那个链表连接到结果链表上。
阅读全文