#include <stdio.h>
#include <stdlib.h>
// 单链表的存储结构
typedef struct Node {
int data;
struct Node* next;
}Node,*LinkList;
/*
* Node,*LinkList 应用的时候的区别
* Node: 使用的时候是 Node *
* *LinkList: 使用的时候是 LinkList
* 写的习惯:
* LinkList: 用来定义函数,和函数参数,定义表或表的指针
* Node*: 用来定义指针,和开辟空间
*/
// 初始化单链表
LinkList InitList () { // 要生成一个链表,注意写法
LinkList L=(Node *) malloc (sizeof(Node));
L->next = NULL;
return L;
}
// 头插法
void creatList(LinkList L) {
Node * s;
int data;
printf("请输入数字,输入-1代表该链表数据输入结束:");
while(1) {
scanf("%d",&data);
if(data == -1) break;
else {
s = (Node *) malloc (sizeof(Node));
s->data = data;
s->next = L->next;
L->next = s;
}
}
}
// 打印链表
// void printList(Node * head) {
void printList(LinkList L) {
Node * r;
// r= head->next;
r= L->next;
while(r) {
printf(" -> %d",r->data);
r = r->next;
}
printf("\n");
}
int main() {
LinkList LA;
LinkList LB;
LinkList LC;
LA = InitList(); // 初始化单链表
LB = InitList();
LC = InitList();
creatList(LA); // 创建单链表
creatList(LB);
creatList(LC);
printList(LA); // 输出链表
printList(LB); // 输出链表
printList(LC); // 输出链表
return 0;
}
//有序合并
void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC){
pa=LA->next;pb=LB->next;
LC=LA;
pc=LC;
while(pa&&pb){
if(pa->data <=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
delete LB;
}