算法源码之单链表逆置
来源:互联网 发布:淘宝虚拟商品怎么发货 编辑:程序博客网 时间:2024/05/24 20:06
记得2012年笔试阿里云的时候,其中就有这么一题,是个填空题,这个问题比较绕,必须一步一图一代码的理解与思考。
其关键代码如下:void ReverseList(Node *L){ Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL){ q=p->next; p->next=L->next; L->next=p; p=q; }}
上述代码有点绕,读者可以画一幅图,手动一行一行的执行,自然明了。
下面是代码是从创建链表、链表逆置、到打印链表的整个过程。
#include<stdio.h>#include<malloc.h>typedef struct Node{ int data; struct Node *next;}Node;void Init(Node *L){ L=(Node*)malloc(sizeof(Node)); L->next=NULL;}void CrtList(Node *L){ Node *p,*q; int e; p=L; printf("输入结点:\n");scanf("%d",&e);while(e!=0){ q=(Node*)malloc(sizeof(Node)); q->data=e; p->next=q; p=q; fflush(stdin);scanf("%d",&e);}p->next=NULL;}void ReverseList(Node *L){ Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL){q=p->next; p->next=L->next; L->next=p; p=q; }}void Print(Node *L){ Node *p; p=L->next; while(p!=NULL){ printf("%d ",p->data); p=p->next; } putchar('\n');}void main(){ Node L; Init(&L); CrtList(&L); printf("逆序前:\n"); Print(&L); ReverseList(&L); printf("逆序后:\n"); Print(&L);}
运行示例:
- 算法源码之单链表逆置
- 算法源码之哈弗曼编码
- 算法源码之哈弗曼编、译码
- 源码分析之最近算法
- STL源码剖析之六:算法
- STL源码剖析 笔记之六 算法
- STL源码剖析学习之数值算法
- STL源码剖析学习之基本算法
- mahout源码分析之贝叶斯算法
- Mahout之k-means算法源码分析
- 【算法导论】C++源码之快速排序
- Lucene之MinShouldMatchScorer算法源码分析
- PCL源码剖析之MarchingCubes算法
- C++ STL源码学习之算法篇
- OpenSSL源码分析之MD5算法
- OpenSSL源码分析之SHA0算法
- 语言识别之DTW算法及其源码
- 语音识别之HMM算法及其源码
- 玩转Red5+Flex(3)—— Red5第一个例子之HelloWorld
- 巧用例外处理多返回值问题(补充)
- Herd Sums
- 桌面数据库
- Mysql 创建外键 1005 err 150
- 算法源码之单链表逆置
- 利用dos命令定时运行计算机
- tiny6410用usb-wifi命令行连wifi问题解决办法
- eclipse插件收集
- 使用runloop阻塞线程的正确写法
- directshow filter 调试步骤
- 简单FTP服务器软件
- oracle 链接问题
- 被神化的乔布斯