#include "stdafx.h"
#include "malloc.h"
typedef struct node
{
int data;
struct node *next;
}lnode;
void listinitiate(lnode **head)
{
*head=(lnode *)malloc(sizeof(lnode));
(*head)->next=NULL;
}
void listinsert(lnode *head,int n,int m)
{
lnode *s;
lnode *p=head;
int i=0;
while(i<m)
{
i++;
p=p->next;
}
if(i==m)
{
s=(lnode *)malloc(sizeof(lnode));
s->data=n;
s->next=p->next;
p->next=s;
}
}
int listlenght(lnode *head)
{
int i=0;
lnode *p=head->next;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
void destroy(lnode **head)
{
lnode *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}
void listget(lnode *head,int n,int *x)
{
int i=0;
lnode *p=head->next;
while(i<n)
{
p=p->next;
i++;
}
if(i==n)
{
*x=p->data;
}
}
void bing(lnode *head1,lnode *head2)
{
lnode *p1=head1->next;
lnode *pre1=head1; //p1的前一个节点
lnode *p2=head2->next;
lnode *pre2=head2; //p2的前一个节点
lnode *pre22=p2->next; //p2的后一个节点
while(p2!=NULL)
{
pre22=p2->next;
while(p1!=NULL&&p2->data>p1->data)
{
pre1=p1;
p1=p1->next;
}
p2->next=pre1->next;
pre1->next=p2;
pre2->next=pre22;
p2=pre22;
}
}
int main()
{
lnode *head1,*head2;
int i,x,k=0;
//初始化链表head1,head2
listinitiate(&head1);
listinitiate(&head2);
//插入链表head1,head2
for(i=0;i<20;i+=2)
{
listinsert(head1,i,k);
k++;
}
k=0;
for(i=1;i<20;i+=2)
{
listinsert(head2,i,k);
k++;
}
//显示链表head1
for(i=0;i<listlenght(head1);i++)
{
listget(head1,i,&x);
printf("%d ",x);
}
//显示链表head2
printf("\n");
for(i=0;i<listlenght(head2);i++)
{
listget(head2,i,&x);
printf("%d ",x);
}
//合并链表head1,head2
bing(head1,head2);
printf("\n");
//显示合并后的链表
for(i=0;i<listlenght(head1);i++)
{
listget(head1,i,&x);
printf("%d ",x);
}
//释放内存
destroy(&head1);
destroy(&head2);
return 1;
}