链表反转的个人心得

链表反转的个人心得


1、双指针方法:
源码:
public LinkList reverse(LinkList head){
LinkList pre = null;
LinkList cur = head;

While(cur!=null){
LinkList t = cur.next;
cur.next = pre; //主要实现地址的转移连接
pre = cur; //实现pre指针的前跳
cur = t; //实现cur指针的后跳
}
return pre;
}
//代码引用自力扣
流程步骤:
1、设置两个指针,一个指向head节点,命名为cur;另一个按照题目要求,指向null;
2、使用while循环或者for循环,遍历链表;
3、循环:
(1)首先创建一个新的节点,用于保存cur下一个节点的内容;
(2)cur.next = pre;字面含义是使得pre节点成为cur的下一节点,也就是将cur移动道pre的前一位置。
(3)Pre = cur;字面含义是将cur的当前内容基于pre节点,其含义为将pre指针指向cur当前位置,或者说,将pre移动到原位置的前一节点位置;
(4)Cur=t;字面含义是将新节点中暂存的原cur.next 节点赋值给cur,其含义为将cur指针回指到原链表中cur的下一位置。
4、最后返回的是以pre为首节点的新链表。
对于循环的个人理解:
(1)先暂存cur节点的下一节点,用于之后的cur指针回跳;
(2)将指向链表前端的cur指针,以link到null结尾的形式,跳到null的前一节点位置,同时实现链表前端cur节点与null节点的连接,即节点的反转;
(3)通过将cur赋值给pre,实现pre指针的前移一位;
(4)通过将暂存的cur节点下一节点内容赋值给cur,实现cur指针的回跳,回跳到原cur指向节点的下一节点。
(5)在这样一个循环之后,cur从头0位置跳到1位置,pre从结尾5跳到4位置,并且1位置与结尾5位置建立了连接。
(6)在下一次循环中,通过cur.next = pre;语句,实现1位置处cur节点与pre节点的连接,由于此时pre的val值为原链表中1位置处的val,所以可以理解为2位置与1位置的反向连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值