第24题:
1.反转链表
2.合并链表。
#include<stdio.h>
#include<stdlib.h>#include<assert.h>
typedef struct SListNode
{
int data;
struct SListNode *next;
}Lnode,*Slinklist;
Slinklist Createlink()
{
int input;
Slinklist Head=NULL;
Slinklist pcur=NULL;
Slinklist qend=NULL;
Head=( Slinklist)malloc(sizeof(Lnode));//申请空间
Head->next=NULL;
printf("please input data:");
scanf("%d",&input);
while(input!=0)
{
pcur=( Slinklist)malloc(sizeof(Lnode));//申请空间
pcur->data=input;
pcur->next=NULL;
if(Head->next==NULL)
{
Head->next=pcur;
}
else
{
qend->next=pcur;
}
qend=pcur;
printf("please input data:");
scanf("%d",&input);
}
return Head;
}
Slinklist Reversion(Slinklist H)
{
assert(H!=NULL);
Slinklist p=H->next,q;
H->next=NULL;
while(p!=NULL)
{
q=p; //q指针插入
p=p->next;
q->next=H->next;
H->next=q;
}
return H;
}
Slinklist Combine(Slinklist H1,Slinklist H2)/*H1的尾结点连接H2->next.并且释放,H2的头指针*/
{
Slinklist H=H1;
while(H->next!=NULL)
{
H=H->next;
}
H->next=H2->next;
free(H2);
H2=NULL;
return H1;
}
void display(Slinklist H)
{
assert(H!=NULL);
Slinklist cur=H->next;
while(cur!=NULL)
{
printf("%d,",cur->data);
cur=cur->next;
}
}
void free_sLink(Slinklist Head)
{
Slinklist cur=Head;
while(cur->next !=NULL )
{
cur=Head;
Head=Head->next;
free(cur);
cur=NULL;
}
free(Head);
Head=NULL;
}
int main(int argc,char* argv[])
{
Slinklist H0;
Slinklist H00;
H0=Createlink();
display(H0);
printf("\n");
H00=Createlink();
display(H00);
printf("\n");
Reversion(H0);
display(H0);
printf("\n");
H0=Combine(H0,H00);
display(H0);
return 1;
}