两个链式存储的线性表LA和LB,其元素均按从小到大的顺序排列,编写一个算法,将他们合并为一个递增的链表,要求利用原表使用C语言
时间: 2024-11-15 20:28:47 浏览: 24
线性表的顺序存储和链式存储实现
为了将两个已排序的链表LA和LB合并成一个新的递增链表,我们可以采用双指针法,同时遍历两个链表。这里是一个简单的C语言函数来实现这个功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* newNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 合并两个有序链表
Node* mergeSortedLists(Node* LA, Node* LB) {
// 初始化头结点
Node* head = NULL;
// 指向LA、LB和新链表的当前节点
Node* la = LA;
Node* lb = LB;
Node* newHead = head;
// 当其中一个链表为空时,将另一个链表的剩余部分接到结果链表上
while (la && lb) {
if (la->data <= lb->data) {
// 将LA的节点插入新链表
newHead->next = la;
newHead = la;
la = la->next;
} else {
newHead->next = lb;
newHead = lb;
lb = lb->next;
}
}
// 如果LA未遍历完,将其余部分接到结果链表
if (la) {
newHead->next = la;
} else {
newHead->next = lb; // 如果LB未遍历完
}
return head;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 用示例数据填充链表
Node* LA = newNode(1);
LA->next = newNode(3);
LA->next->next = newNode(5);
Node* LB = newNode(2);
LB->next = newNode(4);
LB->next->next = newNode(6);
Node* mergedList = mergeSortedLists(LA, LB);
printf("Merged sorted list: ");
printList(mergedList);
return 0;
}
```
阅读全文