博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表倒置
阅读量:4322 次
发布时间:2019-06-06

本文共 1152 字,大约阅读时间需要 3 分钟。

单链表倒置可以说是面试中提问率最高的题目了。网上有很多单链表倒置的算法,但是实现解释的不是很清晰。总结了一些算法之后,把我自己认为好理解的简单方便的算法整理下来,方便以后自己复习。

 

1.迭代

下面的代码及注释应该很好的解释了头插法来实现单链表倒置的思路。

1 Node* Reverse(Node* node)   2 {   3     Node* prev = NULL;        // 用于保存当前链表的头结点 4     Node* tmp = NULL;         // 用于保存当前节点的next 5     while (node != NULL) 6     { 7         tmp = node->_next;    // 保存当前节点的next 8  9         node->_next = prev;   // 将当前节点插入到头结点前10         prev = node;          // 插入之后将当前节点设置为头节点11 12         node = tmp;           // next为下次迭代的当前节点13     }14     return prev;              // 循环结束后,p即为倒置后的头结点15 }

 

2.递归

递归来实现倒置最直接的描述就是入栈出栈,链表节点从头结点开始依次入栈,最后到尾节点入栈结束;开始出栈:尾节点最先出栈,出栈时依次将两个相邻的节点交换指向;出栈结束后,整个链表的倒置就完成了。重要的地方是将最先出栈的尾节点返回,这就是倒置后的链表的头结点。

1 Node* Reverse_recursive(Node* node) 2 { 3     // 停止条件 4     if (node->_next == NULL) 5         return node;            // 表示到最后一个节点,返回这个节点当作头结点 6  7     // 递归 8     Node* prev = Reverse_recursive(node->_next); 9 10     // 操作11     Node* tmp = node->_next;    // 保存当前节点next12     tmp->_next = node;          // 将当前节点放到其next之后13     node->_next = NULL;         // 将当前节点的next置为NULL14 15     return prev;16 }

 

转载于:https://www.cnblogs.com/Ray1024/p/5687737.html

你可能感兴趣的文章
学习MongoDB(二) Replica Set集群配置
查看>>
在只有一个网线的前提下,实现两个电脑之间的局域网通信(伽卡他卡电子教室通信)...
查看>>
maximun-depth-of-binary-tree
查看>>
jump game
查看>>
pose项目里我遇到的问题
查看>>
JNDI 详解
查看>>
html5 本地存储
查看>>
C#中的static、readonly与const的比较
查看>>
理解linux 块, i节点
查看>>
元素垂直或居中定位
查看>>
Selenium自动化-调用Mysql数据库
查看>>
项目一
查看>>
Framework/base 下添加自定义模块的步骤
查看>>
[转载]AAF灵便应用框架简介系列(6):休息一下,泛谈面向对象 Why OO+多层结构?...
查看>>
android EditView ime
查看>>
关于OpenXml SpreadSheet列宽根据内容的Auto-suitability
查看>>
javascript 学习随笔7
查看>>
<P>标签小细节
查看>>
Linux 命令 - netstat
查看>>
安卓模拟器genymotion安装
查看>>