该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
输入两递增链表,然后合并两个链表,使其也为递增链表
#include
#include
#include
typedef struct node{
int data; struct node *next;
}LNode,* LinkList;
void create_Tail(LinkList *L);
void traverse(LinkList );
void merge(LinkList,LinkList,LinkList *);
int main(){
LinkList A;
LinkList B;
create_Tail(&A);
return 0;
}
//尾插法创建链表
void create_Tail(LinkList *L){
int x;
int value;
创造一个头指针
LinkList head = (LinkList)malloc(sizeof(LNode));
if (head = NULL) {
printf("分配失败!退出\n");
exit(-1);
}
LinkList tail = head;
tail->next = NULL;
printf("输入结点的个数:");
scanf("%d",&x);
for (int i = 0; i < x; i++) {
printf("请输入第%d个结点的 值",i+1);
scanf("%d",&value);
//创造链表
LinkList new = (LinkList)malloc(sizeof(LNode));
new->data = value;
tail->next = new;
new->next = NULL;
tail = new;
}
*L = head;
}
//链表的遍历
void traverse(LinkList L){
LinkList p = L->next;
while ( p != NULL) {
printf("%d \t",p->data);
p = p->next;
}
printf("\n");
}
//合并两个递增链表,使得第三个链表也递增
void merge(LinkList A,LinkList B,LinkList *C){
LinkList a = A->next;
LinkList b = B->next;
LinkList s;
*C = A;
(*C)->next = NULL;
free(B);
s = *C;
while (a !=NULL && b != NULL) {
if(a->data <= b->data) {
s->next = a;
a = a->next;
s = s->next;
}
else {
s->next = b;
b = b->next;
s = s->next;
}
}
s->next = NULL;
if (a != NULL) {
s->next = a;
}
if (b != NULL) {
s->next = b;
}
}