将一个链表按逆序排列,即将链头当链尾,链尾当链头
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct student
{
int num;
float score;
struct student *next;
}STU;
STU *create()
{
int i;
STU *p,*head=NULL,*tail=head;
for (i=0;i<N;i++)
{
p=(STU *)malloc(sizeof(STU));
scanf("%d%f",&p->num,&p->score);
p->next=NULL;
if (p->num<0)
{
free(p);
break;
}
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
void output(STU *p)
{
while (p!=NULL)
{
printf("%d\t%.2f\n",p->num,p->score);
p=p->next;
}
}
STU *reverse(STU *p)
{
STU *p1,*p2,*head;
p1=p2=head=p;
while (p!=NULL)
{
p=p->next;
if(p1==head)
p1->next=NULL;
else
p1->next=p2;
p2=p1;
p1=p;
}
head=p2;
return head;
}
int main(int argc, char *argv[])
{
STU *a;
printf("\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
a=create();
printf("\n链表a的信息为:\n");
output(a);
a=reverse(a);
printf("\n反序链表a的信息为:\n");
output(a);
return 0;
}
#include <stdlib.h>
#define N 10
typedef struct student
{
int num;
float score;
struct student *next;
}STU;
STU *create()
{
int i;
STU *p,*head=NULL,*tail=head;
for (i=0;i<N;i++)
{
p=(STU *)malloc(sizeof(STU));
scanf("%d%f",&p->num,&p->score);
p->next=NULL;
if (p->num<0)
{
free(p);
break;
}
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
void output(STU *p)
{
while (p!=NULL)
{
printf("%d\t%.2f\n",p->num,p->score);
p=p->next;
}
}
STU *reverse(STU *p)
{
STU *p1,*p2,*head;
p1=p2=head=p;
while (p!=NULL)
{
p=p->next;
if(p1==head)
p1->next=NULL;
else
p1->next=p2;
p2=p1;
p1=p;
}
head=p2;
return head;
}
int main(int argc, char *argv[])
{
STU *a;
printf("\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
a=create();
printf("\n链表a的信息为:\n");
output(a);
a=reverse(a);
printf("\n反序链表a的信息为:\n");
output(a);
return 0;
}