您的位置:首页 > 其它

将一个链表按逆序排列,即将链头当链尾,链尾当链头

2008-07-10 14:39 218 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐