将两个有序链表合并成一个有序链表
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct _node{
int number;
struct _node *next;
}Node;
typedef struct{
Node *head;
Node *tail;
}List;
void add(List *plist)
{
int number;
bool first=true;
printf("input the number untill -1\n");
scanf("%d",&number);
while(number!=-1)
{
Node *p=(Node *)malloc(sizeof(Node));
p->number=number;
p->next=NULL;
if(first)
{
plist->head->next=p;
plist->tail=p;
first=false;
}
else{
plist->tail->next=p;
plist->tail=p;
}
scanf("%d",&number);
}
}
void print(List *plist)
{
Node *p;
for(p=plist->head->next; p;p=p->next)
printf("%d--",p->number);
printf("\n");
}
void clean_up(List *plist)
{
Node *p;
Node *q;
for(p=plist->head,q=NULL ; p;p=q)
{
q=p->next;
free(p);
}
}
void inversion(List *plist_and);
int main()
{
List list_and;
list_and.head=(Node *)malloc(sizeof(Node));
list_and.tail=NULL;
inversion(&list_and);
printf("the list_and is:\n");
print(&list_and);
clean_up(&list_and);
}
void inversion(List *plist_and)
{
List list_1,list_2;
list_1.head=(Node *)malloc(sizeof(Node));
list_1.tail=NULL;
list_2.head=(Node *)malloc(sizeof(Node));
list_2.tail=NULL;
add(&list_1);
add(&list_2);
printf("the list_1 is:\n");
print(&list_1);
printf("the list_2 is:\n");
print(&list_2);
Node *p=list_1.head->next;
Node *q=list_2.head->next;
Node *and_=plist_and->head;
while( p && q )
{
if(p->number<q->number)
{
and_->next=p;
and_=p;
p=p->next;
}
else{
and_->next=q;
and_=q;
q=q->next;
}
}
if(p)
{
and_->next=p;
}
if(q)
{
and_->next=q;
}
free(list_1.head);
free(list_2.head);
}