单链表的反向
来源:互联网 发布:阿里云怎么做端口映射 编辑:程序博客网 时间:2024/06/11 17:17
昨天看CSDN的一个文章提到,某公司面试时问到单向链表的反转问题,有好多程序员答不出来。以前我也没做过类似的题目,试着写了一下。
问题描述:已知一个单向链表,写一个函数,使得该链表的方向反转,即头变尾,尾变头,指示方向相反。
分析:该问题可以有两种方法,一是交换首尾两个节点的数据,而不改变其内存的存储结构,二是改变所有节点的指向下一个节点的指针。显然第二种方法更加有效。
- /×链表的定义和一些操作*/
- typedef struct list
- {
- int no;
- struct list *pNext;
- }list;
- list *listinit(int count)
- {
- list *pHead;
- list *pList;
- int no=0;
- pHead=malloc(sizeof(list));
- pHead->no=no;
- pList=pHead;
- while(count--)
- {
- pList->pNext=malloc(sizeof(list));
- pList=pList->pNext;
- pList->no=++no;
- }
- pList->pNext=NULL;
- return pHead;
- }
- void listrelease(list *pHead)
- {
- list *pList=pHead;
- list *pNext;
- //free((char*)pHead);
- //return;
- while(pList!=NULL)
- {
- pNext=pList->pNext;
- free(pList);
- pList=pNext;
- }
- }
- /*链表反转的算法,其实很简单*/
- list *listreverse(list *pHead)
- {
- list *pList=pHead;
- list *paPre=NULL;
- list *paNext=NULL;
- do
- {
- paNext=pList->pNext;
- pList->pNext=paPre;
- paPre=pList;
- pList=paNext;
- }while(pList!=NULL);
- return paPre;
- }
- /*这是测试用的函数*/
- void listshow(list *pHead)
- {
- list *pList=pHead;
- while(pList!=NULL)
- {
- printf("list=%d/n",pList->no);
- pList=pList->pNext;
- }
- }
- int main()
- {
- list *pHead=listinit(10);
- printf("before reverse:/n");
- listshow(pHead);
- pHead=listreverse(pHead);
- printf("after reverse:/n");
- listshow(pHead);
- listrelease(pHead);
- return 0;
- }
运行结果:
before reverse:
list=0
list=1
list=2
list=3
list=4
list=5
list=6
list=7
list=8
list=9
list=10
after reverse:
list=10
list=9
list=8
list=7
list=6
list=5
list=4
list=3
list=2
list=1
list=0
- 单链表的反向
- 单链表的反向
- 单链表的反向输出
- 单链表的反向
- 【面试】4.单链表的反向
- 字符串,单链表的反向实现
- 单链表的正向排序,反向排序
- 查出反向木马的反向连接域名
- 查出反向木马的反向连接域名
- 反向连接的SHELL
- 反向工程的工具
- PowerDesigner的反向工程
- 反向神经网络的缺点
- 反向代理的设计
- powerdesigner的反向工程
- 直方图的反向投影
- TreeMap的 反向遍历
- 直方图的反向投影
- Java 安装配置图文教程
- Java正则表达式判断手机号是否合法
- jquery中bind,live,delegate和on的区别
- Confluence 用户列表(User List)宏
- 十天内掌握线性代数:惊人的超速学习实验
- 单链表的反向
- python-十分钟入门
- linux中断处理原理分析
- MapReduce 中的两表 join 几种方案简介
- wxpython get children widget
- Java IO之字节流
- 在vs2013中默认不再包含对多字节字符编码的支持
- 20140305的一篇流水账
- POJ2828 Buy Tickets(线段树)