背诵代码之【翻转链表】

一、问题描述

给定一个单向链表的头节点 head,要求将链表中的节点顺序完全反转。

例如,链表 1 -> 2 -> 3 -> 4 -> 5 翻转后应变为 5 -> 4 -> 3 -> 2 -> 1

二、题解

简单来说就是每个箭头都要反过来指。可以初始化三个指针

pre:指向null

cur:指向第一个节点head

temp:存储cur.next(理解成存储指向下一个节点的箭头)

temp = cur.next; // 保存当前节点的下一个节点(把箭头存起来)
cur.next = pre; // 当前节点的 next 指向前驱节点(把这个箭头指到pre)
pre = cur;      // 前驱节点向前移动
cur = temp;     // 当前节点向前移动

pre、cur一直往前走,当pre到达最后一个节点的时候,cur在pre前面,指向null,所以此时所有节点都被遍历到了,所以while循环的条件是:while(cur != null)

三、完整代码

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null, cur = head, temp = null;
        while (cur != null) {
            temp = cur.next; // 保存当前节点的下一个节点
            cur.next = pre; // 当前节点的 next 指向前驱节点
            pre = cur;      // 前驱节点向前移动
            cur = temp;     // 当前节点向前移动
        }
        return pre; // 返回翻转后的链表头节点
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值