将一个链表按逆序排列,即将链头当链尾,链尾当链头
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;
}
#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;
}
相关文章推荐
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
- 教材答案有错误P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
- 将一个链表按逆序排列
- 链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
- 2. Add Two Numbers 给定的两个链表是逆序排列的,相加后放在一个新的链表里边
- 将链表逆序排列的一个程序及思考的对链表依某一元素排序方法
- 将一个单向链表逆序
- 如何实现将一个链表逆序?
- 建立一个成绩按降序排列的链表
- 日常联系:一个C++程序完成链表的增加结点、删除结点、打印、查询、逆序等操作
- 一个链表L 一个链表P 包含升序排列的整数 操作PrintLots(L,P)将打印L中那些由P所指定的位置上的元素
- 将一个链表进行降序排列
- C语言 将链表中的元素在同一个链表中逆序输出
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 面试题:用一个临时变量实现单链表逆序
- 已知链表的头结点head,写一个函数把这个链表逆序
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,
- 将一个链表逆序并输出