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;
//
返回当前节点
}
这个方法是采用了递归算法,也就是在反转当前节点之前先反转其后继节点,说白了其实就是利用函数的调用堆栈构建了一个临时链表罢了,挺废的一个算法,权当作是写着好玩,没有什么实在的意义。
采用此算法需要注意的是,头结点必须要传入的是引用,因为在递归跳出的时候要切断链表,否则链表将会形成一个回环。
----夫英雄者,胸怀大志,腹有良谋,有包藏宇宙之机,吞吐天地之志者也。
查看全文
相关阅读:
检查宿舍卫生
代码优化中 主窗口 问题 解决
授权 存储
升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980X)
控制器里面添加控制器
版本新特性
ios图片适配问题
启动图片调整
luogu_1896【题解】状压DP
luogu_2602【题解】数位DP 数字计数
原文地址:https://www.cnblogs.com/eagleking0318/p/6521226.html
最新文章
mongodb与mysql命令对比
HTML
类 对象
字符串、列表、字典
联盟常见问题
官网联盟插件公约
雪拂兰
数据库1
1、Window.document对象
DOM的基本概念
热门文章
类型转换:
标签表格
JavaScript简介
悬浮动态分层导航
老--质价比
选夫婿1
小鑫の日常系列故事(十)——排名次
小I选宾馆
选票统计
小I的小姐姐
Copyright © 2011-2022 走看看