使用c语言完成,分别采用尾插入法创建两个有序的单链表:LA, LB;然后将这两个单链表并为一个有序的单链表LC。
时间: 2023-11-22 17:53:26 浏览: 57
C语言实现单向链表的创建、插入,删除节点,和2个链表合并
5星 · 资源好评率100%
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
LinkedList createList() {
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
void insertNode(LinkedList head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node *p = head;
while (p->next != NULL && p->next->data < data) {
p = p->next;
}
newNode->next = p->next;
p->next = newNode;
}
LinkedList mergeList(LinkedList LA, LinkedList LB) {
LinkedList LC = createList();
Node *pA = LA->next, *pB = LB->next;
while (pA != NULL && pB != NULL) {
if (pA->data < pB->data) {
insertNode(LC, pA->data);
pA = pA->next;
} else {
insertNode(LC, pB->data);
pB = pB->next;
}
}
while (pA != NULL) {
insertNode(LC, pA->data);
pA = pA->next;
}
while (pB != NULL) {
insertNode(LC, pB->data);
pB = pB->next;
}
return LC;
}
void printList(LinkedList head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkedList LA = createList();
LinkedList LB = createList();
insertNode(LA, 1);
insertNode(LA, 3);
insertNode(LA, 5);
insertNode(LB, 2);
insertNode(LB, 4);
insertNode(LB, 6);
LinkedList LC = mergeList(LA, LB);
printf("LA: ");
printList(LA);
printf("LB: ");
printList(LB);
printf("LC: ");
printList(LC);
return 0;
}
```
这段代码中,我们定义了一个结构体 `Node`,表示链表的节点,其中包括了节点的数据和指向下一个节点的指针。我们还定义了 `LinkedList`,表示链表的头指针。
为了方便操作,我们定义了三个函数:
- `createList()`:用于创建一个空链表。
- `insertNode(LinkedList head, int data)`:用于在链表 `head` 中插入一个值为 `data` 的节点,插入时按照从小到大的顺序排列。
- `mergeList(LinkedList LA, LinkedList LB)`:用于将两个有序链表 `LA` 和 `LB` 合并为一个有序链表 `LC`。
在 `main()` 函数中,我们首先创建了两个有序链表 `LA` 和 `LB`,然后将它们合并为一个有序链表 `LC`。最后,我们分别输出三个链表的元素,以检查合并是否正确。
阅读全文