单链表翻转算法简单理解(也见单链表反转)

翻转链表

1->null 不用翻转直接返回首结点1
2->1->null 断开2 翻转1->null 1->2->null
3->2->1->null 断开3 翻转2->1->null
4->3->2->1->null 断开4 翻转3->2->1->null

所谓断开首结点,翻转断开首结点后的新链表,这整个过程其实就是在寻找null前的那个结点,也就是我们最后得到的翻转链表的首结点

  • 关键点1:获取null前的那个结点
  • 关键点2:两结点单链表翻转的具象理解
Node recursiveReverse(Node node)
If n.next == null return n

// 获取null前的那个节点 即是最后要的链表首节点
// 思考过程是把这个递归完全展开 
Node last = recursiveReverse(n.next) //通俗理解:就是把当前传入的首结点断开,执行断开首结点后新链表的翻转
n.next.next = n // 具象理解:2->1->null  n.next就是1,n.next.next就是给1的next赋值,即1的next本来是指向null,现在指向1的前一个结点,
n.next = null // 原先首结点的next 翻转最后肯定是指向null
return last
recursiveReverse(4)
last = recursiveReverse(3)
// 递归过程展开
1.next == null return 1
2.next.next=2
2.next=null
3.next.next = 3
3.next = null
4.next.next = 4 // 注意 4.next.next 就是 3.next
4.next=null

最终代码

ListNode recursiveReverse(ListNode head) {
    if (head.next == null) return head;
    ListNode last = recursiveReverse(head.next);
    head.next.next = head;
    head.next = null;
    return last;
}

参考链接:https://zhuanlan.zhihu.com/p/86745433

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值