zoukankan
html css js c++ java
单向链表反转
题目:
已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
解答:
我们假设单向链表的节点如下:
template
<
typename
T
>
class
list_node
{
public
:
list_node
*
next;
T
data;
}
;
这个题目算是考察数据结构的最基础的题目了,有两种方法可以解此题:
方法一:
void
reverse(node
*&
head)
{
if
(
(head
==
0
)
||
(head
->
next
==
0
)
)
return
;
//
边界检测
node
*
pNext
=
0
;
node
*
pPrev
=
head;
//
保存链表头节点
node
*
pCur
=
head
->
next;
//
获取当前节点
while
(pCur
!=
0
)
{
pNext
=
pCur
->
next;
//
将下一个节点保存下来
pCur
->
next
=
pPrev;
//
将当前节点的下一节点置为前节点
pPrev
=
pCur;
//
将当前节点保存为前一节点
pCur
=
pNext;
//
将当前节点置为下一节点
}
head->next=pPrev;
}
这是一般的方法,总之就是用了几个临时变量,然后遍历整个链表,将当前节点的下一节点置为前节点。
方法二:
node
*
reverse(
node
*
pNode,
node
*&
head)
{
if
(
(pNode
==
0
)
||
(pNode
->
next
==
0
)
)
//
递归跳出条件
{
head
=
pNode;
//
将链表切断,否则会形成回环
return
pNode;
}
node
*
temp
=
reserve(pNode
->
next,
head);
//
递归
temp
->
next
=
pNode;
//
将下一节点置为当前节点,既前置节点
return
pNode;
//
返回当前节点
}
这个方法是采用了递归算法,也就是在反转当前节点之前先反转其后继节点,说白了其实就是利用函数的调用堆栈构建了一个临时链表罢了,挺废的一个算法,权当作是写着好玩,没有什么实在的意义。
采用此算法需要注意的是,头结点必须要传入的是引用,因为在递归跳出的时候要切断链表,否则链表将会形成一个回环。
----夫英雄者,胸怀大志,腹有良谋,有包藏宇宙之机,吞吐天地之志者也。
查看全文
相关阅读:
我是一只IT小小鸟读后感
世界,是数字的。
读书笔记之《HTML5 与 CSS3 基础教程》
sharepoint 2010 使用程序向页面添加webpart
SharePoint 2010 使用”日历重叠“功能
将当前列表视图导出到Excel中
SharePoint 2010 PowerShell(3)使用PowerShell管理列表
SharePoint 2010 PowerShell(4)使用PowerShell管理文档库
sharepoint 2010 配置备用访问映射
SharePoint 2010 PowerShell(2)使用PowerShell管理网站
原文地址:https://www.cnblogs.com/eagleking0318/p/6521226.html
最新文章
MyEclipse,Tomcat,JDK中的配置(转载)
面向对象轮播
原生js随笔
学习网站分享
自定义动画animate可以操作css样式属性总结
面向对象的放大镜
转载非原创 一个APP的前世和今生
zz QQ圈子感想
JEE参考资料
pygraphviz的安装
热门文章
java2html test
HTML CSS Javascript
代码美化
ASPNET的参考资料
了解SQL Server触发器及触发器中的事务
事务使用
经典SQL语句大全
更改存储过程的所有者
jqueryautocomplete 参数说明
周总结
Copyright © 2011-2022 走看看