#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct Node{
int Data;
struct Node *Next;
};
struct Node *create(){
struct Node *head;
head=(struct Node *)malloc(sizeof(struct Node));
head->Next=NULL;
return head;
}
void Sq_insert(struct Node *head,int num){
struct Node *p,*q;
p=head;
while(p->Next!=NULL&&p->Next->Data<num){
p=p->Next;
}
q=(struct Node *)malloc(sizeof(struct Node));
q->Data=num;
q->Next=p->Next;
p->Next=q;
}
void show(struct Node *head){
struct Node *p;
p=head->Next;
int count=0;
while(p!=NULL){
printf("%d\t",p->Data);
count++;
if(count%10==0){
printf("\n");
}
p=p->Next;
}
printf("\n");
}
void merge(struct Node *head1,struct Node *head2){/*合并后以head1为头节点*/
struct Node *p1,*q1,*q2;
p1=head1;
q1=head1->Next;
q2=head2->Next;
while(q1&&q2){
if(q1->Data<=q2->Data){
p1->Next=q1;
p1=q1;
q1=q1->Next;
}else{
p1->Next=q2;
p1=q2;
q2=q2->Next;
}
}
p1->Next=q1?q1:q2;
}
int main(){
struct Node *head1,*head2;
head1=create();
head2=create();
srand(time(NULL));
for(int i=0;i<8;i++){
Sq_insert(head1,rand()%10+1);
Sq_insert(head2,rand()%10+1);
}
printf("原链表1:\t");
show(head1);
printf("原链表2:\t");
show(head2);
merge(head1,head2);
printf("合并后链表:\n");
show(head1);
return 0;
}
将两个从小到大排列的链表合并为一个新链表(仍然有序排列),输出合并前的两个链表,输出合并后的链表,检查合并是否成功。(C语言)
最新推荐文章于 2022-08-29 16:24:01 发布