方法一
从第二个节点开始,依次把节点变成头个节点。
![单链表的反转.png 单链表的反转.png]()
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 单链表的反转递归法.png]()
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 _当前节点; }
|