单链表的逆置(完整程序加思路分析)
来源:互联网 发布:发那科机器人编程培训 编辑:程序博客网 时间:2024/06/08 13:47
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define N 3typedef struct node{ char name[20]; struct node *next;}stud;stud *creat(int n){ stud *p,*h,*s; int i; if((h=(stud*)malloc(sizeof(stud)))==NULL) { printf("不能分配内存空间!"); exit(0); } h->name[0] = '\0'; h->next=NULL; p = h; for(i = 0;i<n;i++) {if((s=(stud*)malloc(sizeof(stud)))==NULL) { printf("不能分配内存空间!"); exit(0); }p->next = s;printf("请输入第%d个人的名字",i+1);scanf("%s",s->name);s->next = NULL;p = s; } return(h);}void printList(stud *p){ while(p->next){ p = p->next; printf("%s\n",p->name);}}void reverse(stud *p){ stud *a,*b,*c; a = p; b = p->next; while(b->next!=NULL) { c=b->next; b->next = a; a = b; b=c; } b->next = a; p->next->next = NULL; p->next=b;}void main(){ int number; stud *head; number = N; head = creat(number); printList(head); reverse(head); printf("单链表逆置之后:\n"); printList(head);}
结果如下:
下面就来详细解释一下单链表逆置的思想:
什么是单链表逆置
链表 a -> b -> c -> d 表头是a,表尾是d。逆置的意思就是变成:
a <- b <- c <- d a变成表尾,d变成表头
void reverse(stud *p){ stud *a,*b,*c; a = p;//p传的是表头;a此时指向了表头; b = p->next;//b指向了表的第一个节点 while(b->next!=NULL)//就是只要b的下一个节点不为空,就改变指针方向 { c=b->next; //先把b的下一个节点保存 b->next = a;//改变b->next的指向 a = b;//下面这两句相当于a和b分别后移了一个节点。 b=c; } b->next = a; p->next->next = NULL; p->next=b;}
0 0
- 单链表的逆置(完整程序加思路分析)
- 一套完整的设计分析思路
- Thrift源码分析(八)--总结加一个完整的可运行的Thrift例子
- mips汇编完整程序的分析
- Java程序的一个完整阅读分析
- 程序分析思路
- 新闻管理模块(在程序中可以使用的一套完整的增添、修改、查询数据的思路)
- 入侵大站的完整思路
- 社交(SNS)网站的完整设计思路之3
- MSSQL 复制完整的数据库结构思路(SQL脚本)
- Java 用户资料完整度的前端显示(思路)
- 加解密的困惑与思路(接上篇)
- hibernate+spring的整合思路加实例(配图解)
- 据说是百度的面试题-"灵魂算法" (算法思路分析及程序模拟)
- 停车场模拟问题的分析思路,解决细节。加了关键注释。
- 完整的AES分组与文件的加解密功能程序实现
- 一个完整win32汇编窗口程序的分析
- 2010.08.05_ximo_加VMP外壳后的程序的爆破分析二(vmp 2.05)
- 第三篇博客
- 阅读读程序(3)
- AsyncSocket
- mysql 出现column not found 问题
- 虚拟存储器
- 单链表的逆置(完整程序加思路分析)
- 基于Android Studio的内存泄漏检测与解决全攻略
- gulpfile
- MVC,MVP 和 MVVM 的图示
- android系统中与内存有关的文件及路径
- servlet1-生命周期
- Android Https
- Android Studio怎么查看程序的安全码获取SHA1值? 百度地图等开发
- 进程间通信 - 动态链接库中共享内存