#include
typedef struct node
{
int num;
struct node *next;
}*LINK,NODE;
LINK link_rev(LINK head);
LINK link_cr(int num);
void link_show(LINK head);
int main()
{
LINK *p,head,head1;
head=link_cr(5);
printf("Now create 5 NODE LINK,print:");
link_show(head);
printf("Now REV,print:\n\n");
head=link_rev(head);
link_show(head);
getchar();
}
LINK link_rev(LINK head)
{
LINK p1,p2,p3;
p1=p2=p3=head;
while(p3->next!=NULL)
{
if(p3==head)
{
p2=p1->next;
p3=p2->next;
p1->next=NULL;
p2->next=p1;
p1=p2;
p2=p3;
}
else
{
p3=p3->next;
p2->next=p1;
p1=p2;
p2=p3;
}
}
p3->next=p1;
return p3;
}
LINK link_cr(int num)
{
LINK p1,p2,head;
int i;
head=p1=p2=(LINK)malloc(sizeof(NODE));
p1->num=1;
for(i=2;i<=num;i++)
{
p1=(LINK)malloc(sizeof(NODE));
p2->next=p1;
p1->num=i;
p2=p1;
}
p2->next=NULL;
return head;
}
void link_show(LINK head)
{
LINK p1=head;
while(p1!=NULL)
{
printf("NODE:%d next Address:%ld \n",p1->num,&(p1->next));
p1=p1->next;
}
}
链表的就地反转 c语言实现
Leave a reply