将一个链表按逆序排列,即将链头当链尾,链尾当链头。
源程序:
#include
#include
#define LEN sizeof(struct student)
struct student
{
int num;
struct student* next;
};
int n;
struct student * creat(void)
{
//struct student* p1,*p2,*head;
struct student * p1;
struct student * p2;
struct student * head;
p1=p2=(struct student *)malloc(LEN);
head=NULL;
n=0;
printf("请输入学生的学号(输入学号0结束):\n");
scanf("%d",&p1->num);
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
printf("请输入学生的学号(输入学号0结束):\n");
p1=(struct student*)malloc(LEN);
scanf("%d",&p1->num);
}
p2->next=NULL;
return (head);
}
struct student *nixu(struct student * head)
{
struct student *s,*t;
s=head;
head=NULL;
while(s)
{
t=s;
s=s->next;
t->next=head;
head=t;
}
return head;
}
void print(struct student* head,int n)
{
struct student* p1,*p2,*p3;
p1=head;
while(p1!=NULL)
{
printf("%d\n",p1->num);
p1=p1->next;
}
}
int main() { struct student* head; head=creat(); print(head,n); head=nixu(head); printf("nixuhou:\n"); print(head,n); }