单链表的逆置
来源:互联网 发布:免费简约导航php源码 编辑:程序博客网 时间:2024/05/16 04:53
题目:一个有头结点的单链表,如何将其逆置。
首先定义一个结构体:
typedef int DataType;typedef struct node{DataType data;struct node*next;};
分析:首先考虑一般情况,设置三个指针,分别表示目前,之前,之后位置。pcur,ppre,pnext的节点。逆置时,将pcur的next指针指向ppre,然后将pcur赋值为pnext,接着ppre变为pcur。
接下来考虑,头结点和尾节点的处理。当头结点存储了数据时,设置头结点为pcur,也就是当前结点。ppre,就是之前结点设置为空。按照上面的操作头结点的next指针会指向空。如果头结点为空结点时,将头结点的下一个指针设置为当前结点即可。
pcur指针逐渐后移,直到遇到尾节点,此时pcur指向尾节点,pnext指向空。所以可以用pnext是否为空判断是否到达尾节点。到达尾节点时将pcur赋值给phead.
实现代码如下(假设头结点不为空)
void reverse_list(node *&phead){if (phead==NULL){return;}node*pcur = phead;node*ppre = NULL;node*pnext = NULL;while (ppre){pnext = pcur->next;if (pnext==NULL)//遇到尾节点时将头节点设置为他。{phead = pcur;return;}pcur->next = ppre;ppre = pcur;pcur = pnext;}}
考虑第二种情况,如果头结点不存储数据,那么初始化时将ppcur赋值为phead->next,ppre赋值为NULL,最后在到达尾节点时,将phead指向尾节点。
void reverse_list(node *&phead){if (phead==NULL){return;}node*pcur = phead->next;node*ppre = NULL;node*pnext = NULL;while (ppre){pnext = pcur->next;if (pnext==NULL){phead->next = pcur;//遇到尾节点时让头节点指向他return;}pcur->next = ppre;ppre = pcur;pcur = pnext;}}
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- SWT Win32 Extension
- 应该知道的Linux技巧
- 为什么要用存储过程
- Linux下如何使用蓝牙
- 数字证书
- 单链表的逆置
- C语言 typedef 简单应用技巧
- win32 ,在edit控件中删除字符后,在保存到文件,被删字符仍在文件中
- TCP“未来”性能
- 输入一个单向链表,输出该链表中倒数第k个结点
- Linux挂载和卸载文件系统
- Five Myths about Hash Tables
- 导入数据(ADO.Net)
- 操作符重载和复制构造函数