对单链表实现就地逆置
来源:互联网 发布:树莓派3kail linux 编辑:程序博客网 时间:2024/05/19 08:26
单链表类型定义如下:
typedef struct LNode{ ElemType data; struct LNode *next;} LNode, *LinkList;实现函数如下:
void Inverse(LinkList &L) /* 对带头结点的单链表L实现就地逆置 */{ LinkList s,p,q,r; s = L; //记录头结点 p = s -> next; if(p -> next){ q = p -> next; if(q -> next){ r = q -> next; //s,p,q,r分别指向连续的四个节点 q -> next = p; s = p; //s指针作为标记指针存在,标记逆序前的第一个节点 L -> next = q; while(!(r -> next == p) || !(r -> next == q)){ if(r){ //如果p或q存在后继结点r,继续将p或q的后继结点插到q或p的前面 if(q -> next == p){ //q节点在p节点前面时的情况 p = r; r = r -> next; //r继续向后移,r作为一个记录指针存在 p -> next = q; L -> next = p; //将p节点插到q节点之前 } if(p -> next == q && r){ //p节点在q节点前面时的情况 q = r; r = r -> next; //r继续向后移,r作为一个记录指针存在 q -> next = p; L -> next = q; //将q节点插到p节点之前 } }else break; //不符合条件,直接跳出循环 } s -> next = null; //将逆序前的第一个节点指针域置为NULL }else{ //除头结点外,只有两个节点的情况 q -> next = p; L -> next = q; p -> next = null; } } }总结:对于单链表实现就地逆置,因为没有想到其他的方法,就用了一种比较笨的方法实现。先画出链表结构,经过分析,发现从第二个节点开始(头结点除外),将往后的每一个节点插到头结点的后面即可以实现单链表就地逆置。
0 0
- 对单链表实现就地逆置
- 实现单链表的就地逆置算法
- 实现单链表的就地逆置
- 对带头结点的单链表实现就地逆置的算法分析
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- C语言:单链表实现(二) 就地逆置,就地归并
- 单链表的就地逆置.
- 单链表的就地逆置
- 单链表的就地逆置
- 单链表的就地逆置
- 淘宝高性能可伸缩平台架构简介
- fzu 2155 并查集的删除
- 2014.4.9 今天自己写了个计算器,帮基友算东西
- 【转】Windows下资源泄漏检测
- 菜鸟学EJB(一)——第一个实例
- 对单链表实现就地逆置
- 栈区vs堆区vs静态区vs文字常量区,均是什么含义,并各有什么不同?
- List接口的常用操作
- Windows 7 远程登入 ubuntu12.04(PuTTY实现)
- 系统架构师的修炼
- 如何查看ubuntu是32位还是64位
- hadoop系统运维-linux quta配置
- linux下access函数的使用
- item20: 尽量以pass-by-reference-to-const替换pass-by-value