链表翻转的是三种方法
来源:互联网 发布:软件的盈利模式 编辑:程序博客网 时间:2024/06/14 05:31
翻转链表的三种方法
- 每次遍历从最后一个节点插入最前面
- 使用三个指针原地不动翻转链表
- 递归法翻转链表
接下来进行一一叙述
(1)对于第一中方法比较笨拙,思路是:首先遍历到链表的最后一个节点,将最后一个节点插入头节点的后面,接着循环上述操作一一进行插入,知道只剩下一个节点为止。
void ReserveList(pListNode pHead){ pListNode p = pHead; pListNode pPre = pHead; pListNode pTail = pHead->next; while (p->next->next != NULL) { while (pTail->next) { pPre = pTail; pTail = pTail->next; } pPre->next = NULL; pTail->next = p->next; p->next = pTail; p = pTail; }}
(2)第二种方法比较简单,且操作简单,容易理解。思路为:首先定义三个指分别 Pre(表示当前指针的前驱初值为NULL),pCur(当前节点指针),pNext(当前节点的下一个指针),每当当前指针不为空时就会把当前指针直线前驱指针,直到当前指针为空。
void ReserveList(pListNode pHead){ pListNode pre = NULL; pListNode pNext = NULL; pListNode pCur = pHead->next; while (pCur) { pNext = pCur->next; pCur->next = pre; pre = pCur; pCur = pNext; } pHead->next = pre;}
(3)第三种方法即递归方法我感是最简单的方法,但是自我认为理解起来也比较简单,可能自己对递归方面做的题目比较多,所以理解起来比较简单,该方法思路为:当求全部链表的翻转时,只要把除当前指针外后面的指针翻转,然后再把当前指针放在翻转后的指针后面就行了,即把链表从更大范围翻转缩小更小范围
pListNode ReserveList(pListNode p, pListNode pStaticHead){ if (pStaticHead == NULL) { return NULL; } if (p->next == NULL) { pStaticHead->next = p; return p; } else { pListNode temp = ReserveList(p->next,pStaticHead); temp->next = p; p->next = NULL; return p; }}
好了 以上就是对链翻转方法的总结,
阅读全文
0 0
- 链表翻转的是三种方法
- 无情链表的创建,,翻转翻转
- 链表的翻转
- 链表的翻转
- 链表的翻转
- 翻转链表的三种方法(python实现)
- 字符串翻转的方法
- 链表的翻转实现
- 链表的部分翻转
- 链表的部分翻转
- 链表的部分翻转
- 链表翻转的两种方法(递归+非递归)
- 链表的相邻元素的翻转
- 单向链表的创建及翻转
- 普通单向链表的翻转
- 链表的翻转合并创建
- 翻转链表的C++实现
- 链表的翻转(史上最简)
- ADB简单调试技巧及Android JNI crash调试定位错误信息
- 创建 删除文件 文件夹命名
- BAPI_OUTB_DELIVERY_CREATE_SLS 创建外向交货单(参考SO)
- Verilog中assign的用法
- 解决Zookeeper无法启动的问题
- 链表翻转的是三种方法
- 单例模式
- .net 简易数据库操作框架1.6
- Linux多线程──3个子线程轮流运行
- add(int index, E element) 在列表的指定位置插入元素
- day58:hibernate04_JPA注解方式实现hibernate CRUD--【用户添加角色没那摩神秘】
- [HDU] 2054 -A == B ?
- 【HDU4336】Card Collector-状态压缩DP+期望DP
- python绘图实践-泰坦尼克号绘图