数据结构与算法笔记:链表——力扣206

题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路

首先,我们给出一个链表。

现在我们要做的就是把箭头反转。那么问题就来了,3指向了2,2指向了1,那么1又指向谁呢?

总不能让人家做个野指针露宿街头吧?有个毛胚房都比流浪强。

这个时候就该空指针登场了。我们创建一个空指针。虽然1指向的地方家徒四壁,但好歹是个家啊!

 

但是问题又来了,当我好不容易把1连上了null的时候,2以及2之后的节点我就再也找不到了。链表不像数组,如果说数组是放在平地上任君欣赏的一个个相连的格子的话,那么链表就是一条在重力作用下下垂的链子。

 

1只要和2断开联系,那么就再也找不到彼此,就好像泷和三叶,互相忘了名字。

怎么办呢?把名字写下来保存在一个地方不就好了!(可别在这紧要关头表白啊喂!)

这时候就该轮到三位救命大哥登场了:前指针pre,后指针beh,以及中间指针cur,我把他们称为牵线搭桥月老三人组。

它们分别有什么用途呢?

pre和cur负责箭头的反转,

先令cur等于链表头,这个时候cur也相当于一个头,它下面也和原链表一样 ,然后cur直接连向pre,

 

 之后,pre和cur要往下走,pre是可以走的,令pre=cur就可以,但是cur现在无路可走了,他已经忘记原本连着的2了,这个时候就要用到beh了。

 

beh提前为cur铺路,让pre和cur的局部反转工作完成后可以直接通过cur=beh想起“她”的名字。

 

这样我们就完成了1与2之间的反转,以此类推完成其他节点 也不成问题。

代码

 

public class Solution206 {
    public ListNode reverseList(ListNode head) {
        ListNode pre=null;//前呼
        ListNode cur=head;
        ListNode beh=null;//后应
        while(cur!=null){
            beh=cur.next;
            cur.next=pre;
            pre=cur;
            cur=beh;
        }
        return pre;
    }
}

/*
import java.util.LinkedList;

public class ListNode extends LinkedList<Integer> {//ListNode类
       int val;
       ListNode next;
       ListNode() {}
       ListNode(int val) { this.val = val; }
       ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值