Leecode剑指 Offer II 024. 反转链表

  • Post author:
  • Post category:其他


剑指 Offer II 024. 反转链表

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

示例 1:

在这里插入图片描述

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例 2:

在这里插入图片描述

输入:head = [1,2]

输出:[2,1]

示例 3:

输入:head = []

输出:[]

提示:

链表中节点的数目范围是 [0, 5000]

-5000 <= Node.val <= 5000

b站大佬的很好的思路,这里借用一下

!
](https://img-blog.csdnimg.cn/ec04db15c4eb48338e0864693090b3f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUXVya18=,size_20,color_FFFFFF,t_70,g_se,x_16)

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null){
            return null;
        }
        //定义翻转后的头节点,直接就给null的默认值
        ListNode pre=null;
        //定义当前指针值为直接指向头节点
        ListNode curr=head;
        //一个临时变量next,作临时的容器
        ListNode next=null;
        while(curr!=null){
        //把没翻转之前的下一个节点储存下来
        next=curr.next;
        //翻转当前节点的指向
        curr.next=pre;
        //移动指针,先移动排在前面(靠左)的指针
        pre=curr;
        //移动当前指针curr
        curr=next;
        }
        //返回这个翻转完的前节点
        return pre;
    }
}



V2.0版本,时隔好久重刷,找到感觉了~

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null){
            return head;
        }
        ListNode curr=head;
        ListNode pre=null;
        while(curr!=null){
            //因为要往下遍历的同时还要改反向,所以要有个临时值来保存curr的下一个值
            //不保存就没法往下走了
            ListNode tempNode=curr.next;
            //改指向反向
            curr.next=pre;
            //推着前指针往下走
            pre=curr;
            //推着curr后指针往下走
            curr=tempNode;
        }
        return pre;
    }
}



版权声明:本文为weixin_46906696原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。