jdk8 list 反转_链表反转解法

7ef46fb8608424a844bbf4e943d3903f.png

背景

当初大二学习数据结构的时候,有许多数据结构我都学得有点懵,总感觉没有一个系统的概括和总结,导致我的链表学得一般。后来班上有个同学微信跟我说叫我关注”程序员小灰”这个公众号,说他讲得很生动形象,最后关注了一波,看了他里面一道经典的面试题——链表反转。接下来就来讲解链表反转的解法。

链表反转图示

447698d867bba10c9184afbc682fc231.png

解法说明

  1. 链表反转的本质其实就是把每一个节点原本指向下一个节点的next的指针,反转过来指向它的前置节点。

bacaacb52a3c5fdbd6ff7161bf2ed946.png
  1. 进行链表反转的时候,需要同时知道三个节点才能进行反转。

f0577e482e3df62f13584092603ceda0.png

解法步骤

1、以p2节点为根,把p2节点原本指向p3的next指针反转,指向p1

6e2031f7d279c997c464308936c451cc.png

2、三个临时节点引用p1,p2,p3分别向后移动一位

c3240dfbd31245e0347217f65f396b25.png

3、重复”1”的工作,以p2节点为根,把p2节点原本指向p3的next指针反转,指向p1

30c21df7b34ac308a715174577e2ae6f.png

4、重复”2”的工作,三个临时节点引用p1,p2,p3分别向后移动一位

dab7685e681722500436a5d25c1ea85d.png

5、继续重复以上的工作,一直到p2为空为止

a5dbb45cbd74eb02920faea6834d6a18.png

6、最后,把head节点的next指向空,成为反转链表的尾节点。并把p1赋值给head,让p1所在节点成为反转链表的头节点

e8e4cdda394ab87bd0f20e95688573fc.png

听完上面的讲解,估计有点懵逼,来看看代码的实现,再结合上面的图示步骤,相信你就会理解链表反转了

代码实现

public 

总结

对于链表的反转就介绍到这里,感谢大家的支持。嘻嘻嘻~~~

参考来源

  • 程序员小灰公众号
  • 牛客网原题链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值