【力扣】206.反转链表

206.反转链表

这道题有两种解法,但不只有两种,嘿嘿。

法一:迭代法

就是按循序遍历将每一个指针的指向都给改了。比如说1------>2------>3改为null<------1<------2<------3这样。那这里以第二个结点为例,想一想。我想要指向本身的指针改为指向1,那我是不是要获取它前一个结点的值,那这怎么获取呢,所以需要用一个指针来保存前一个结点。同理,当我成功的将指向本身的箭头更改之后,那我原本元素的下一个咋整,还能找到吗,所以又需要设立一个指针用以保存后面的原本的值。说的可能很复杂,但是代码很简单。

代码:

(参考官方的,因为我现在还在学习阶段)

java 复制代码
/**
 * 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) {
        //1、迭代
        //pre用于存储当前结点的前一个结点
        ListNode pre=null;
        ListNode curr=head;
        while(curr!=null){
            //next指针用于存储当前结点的后一个结点
            ListNode next=curr.next;
            curr.next=pre;
            pre=curr;
            curr=next;
        }
        return pre;
    }
}

法二:递归

这个我比较喜欢。

题解:

用递归,直到当前结点p,的p-next=null则返回其本身。然后回到上一个结点。

head.next.next=head;

head.next=null;

这两行代码的作用在于将当前结点的p-next=null,同时将当前结点的下一个结点的next指向本身,将箭头调换,指向自己,但不是自杀,只是为了完成任务而已(开个玩笑)。

我觉得可能会卡在对递归的理解,多多刷题,多多思考,相信自己,就ok了。

代码:

java 复制代码
/**
 * 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) {
        //2、递归
        if(head==null||head.next==null){
            return head;
        }
        ListNode newHead=reverseList(head.next);
        //反转吧
        head.next.next=head;
        head.next=null;
        return newHead;
    }
}
相关推荐
mit6.8247 分钟前
hash滑窗|dp
算法
Shinom1ya_10 分钟前
算法 day 42
数据结构·算法·leetcode
earthzhang202113 分钟前
【2051】【例3.1】偶数
开发语言·数据结构·算法·青少年编程·图论
专注VB编程开发20年27 分钟前
.net c#音频放大,音量增益算法防止溢出
算法·c#·音频处理·录音·音量增益·增益控制
唯道行39 分钟前
计算机图形学·6 OpenGL编程3 谢尔宾斯基垫与三维编程
人工智能·算法·计算机视觉·计算机图形学·三维·谢尔宾斯基垫
高山上有一只小老虎42 分钟前
求最大连续bit数
java·算法
Dylan的码园1 小时前
以二叉树问题为基础的递归调试学习(上)
java·学习·算法·leetcode·r-tree
少许极端1 小时前
算法奇妙屋(九)-栈
java·数据结构·算法·
CoovallyAIHub1 小时前
未来已来:从 CVPR & ICCV 观察 2025→2026 年计算机视觉的七大走向
深度学习·算法·计算机视觉
apcipot_rain2 小时前
CSP集训错题集 第八周 主题:基础图论
算法·图论