1->2->3->4->5反转为:5->4->3->2->1
#include <stdio.h>
#include<stdlib.h>
struct node
{
int num;
struct node *next;
};
void PrintLink(struct node *p)
{
struct node *head=p;
while(head!=NULL)
{
printf("%d ",head->num);
head=head->next;
}
putchar('\n');
}
int totalNode(struct node *p)
{
struct node *head=p;
int num=0;
while(head!=NULL)
{
num++;
head=head->next;
}
return num;
}
struct node *fanzhuan(struct node *phead)//反转链表操作——迭代法
{
struct node *head=phead;
struct node *b;
struct node *a;
if(head==NULL)
{
return head;
}
else
{
a=phead;
head=NULL;
while(a!=NULL)
{
b=a->next;
a->next=head;
head=a;
a=b;
}
}
return head;
}
int main()
{
struct node t5={5,NULL};
struct node t4={4,NULL};
struct node t3={3,NULL};
struct node t2={2,NULL};
struct node t1={1,NULL};
t1.next=&t2;
t2.next=&t3;
t3.next=&t4;
t4.next=&t5;
PrintLink(&t1);
printf("Total Node: %d\n",totalNode(&t1));
struct node *pp=fanzhuan(&t1);
PrintLink(pp);
return 0;
}
?
|