将一个链表按逆序排列,即将链头当链尾,链尾当链头。
2017-08-10 21:51
351 查看
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct student) int n=0; struct student{ //学生结构体节点 int num; char name[20]; struct student *next; }; struct student *creat(){ //链表建立 struct student *head,*p1,*p2; head=0; p1=p2=(struct student *)malloc(LEN); printf("请输入学生ID和姓名,中间以空格隔开,输入0 0结束输入:"); scanf("%d %s",&p1->num,p1->name); while(p1->num!=0){ n++; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(LEN); scanf("%d %s",&p1->num,p1->name); } p2->next=0; return head; } void print(struct student *p){ //链表打印 while(p!=0){ printf("%d %s\n",p->num,p->name); p=p->next; } } struct student *paixu(struct student *p){ struct student *head,*p1,*p2,*p3; head=p1=p2=p; int k=0; while(p1!=0) { k++; if(p1->next!=0){ //没到结尾的情况处理 if(k==1) p1=p1->next; //链表第一个元素的处理 else { p3=p1->next; //以后的元素处理 p1->next=p2; p2=p1; p1=p3;} } else { //到结尾了 处理完链表头 跳出循环 head->next=0; head=p1; p1->next=p2; break; } } return head; } int main() { struct student *head=creat(); //调用链表 struct student *head1=paixu(head); //调用逆序排列 print(head1); //打印逆序后的结果 return 0; }
相关文章推荐
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
- 教材答案有错误P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
- 链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
- 将链表逆序排列的一个程序及思考的对链表依某一元素排序方法
- 将一个链表按逆序排列
- 2. Add Two Numbers 给定的两个链表是逆序排列的,相加后放在一个新的链表里边
- 每天一个算法之链表逆序
- 已知链表的头结点head,写一个函数把这个链表逆序
- 给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序
- 向升序排列的单链表中插入一个值,要求插入后仍为升序链表
- 将一个链表逆序
- .定义两个数组,首先把两个数组合并成一个新数组,然后把新数组中的所有元素逆序排列,需要实现的效果如图-2所示。
- 题目2.给出一个算法,它能用O(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目
- 将一个链表进行降序排列
- 基于链表:键盘输入若干个整数,按输入数据逆序建立一个带头结点的单链表
- 日常联系:一个C++程序完成链表的增加结点、删除结点、打印、查询、逆序等操作
- 09-11-08:将一个链表倒序排列的函数
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,