avatar

目录
单链表的反转

方法一

从第二个节点开始,依次把节点变成头个节点。

单链表的反转.png

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//链表无辅助头节点
public void 反转(){

if(_头指针 == null){
return;
}

节点 _目标节点的前一个元素 = _头指针;//第一个节点不用动

while ( _目标节点的前一个元素._下一个节点 != null){
节点 _目标节点 = _目标节点的前一个元素._下一个节点;

_目标节点的前一个元素._下一个节点 = _目标节点._下一个节点;
_目标节点._下一个节点 = _头指针;
_头指针 = _目标节点;
}
}

方法二

递归法,修改自己的下一个节点为null,然后返回自己给前一个节点。

单链表的反转递归法.png

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//链表无辅助头节点
public void 递归反转(){

if (_头指针 == null){
return;
}
递归反转(_头指针);
}

private 节点 递归反转(节点 _当前节点){

//最后一个节点: 把头指针指向最后一个节点
if(_当前节点._下一个节点 == null){
_头指针 = _当前节点;
return _当前节点;
}

//当前节点的下一个节点完成它该做的操作之后, 把自己反回去
节点 _当前节点的下一个节点 = 递归反转(_当前节点._下一个节点);

//因为要反转, 把返回来的下一个节点指向当前节点
_当前节点的下一个节点._下一个节点 = _当前节点;

//因为不知道那那一个节点是未反转前头一个节点, 所以假设每个节点都是
// 如果不是, 当递归到它前一个元素时, 上面一行代码会将这个节点的下一节点修正
_当前节点._下一个节点 = null;

return _当前节点;
}
文章作者: Juchia Lu
文章链接: https://juchia.com/2018/11/13/%E5%8D%95%E9%93%BE%E8%A1%A8%E7%9A%84%E5%8F%8D%E8%BD%AC/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Juchia