LeetCode_206反转链表(用烧脑的递归思想和迭代思想实现)

本文详细介绍了两种反转链表的方法:递归法和迭代法。递归法虽然代码简洁但理解较难,而迭代法则相反,通过实例演示帮助读者更好地掌握这两种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
方法1、递归思想(代码简单但比较难理解)
难点:
递归要层层调用,将下一级的返回结果传给上一级;结合图容易理解
图解
在这里插入图片描述
代码实现

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode h=reverseList(head.next);  //递归调用
        head.next.next=head;    //将上一级的结点(head)放在下一级结点(head.next)的后面
        head.next=null;         //将上一级结点之后置空
        return h;           //返回一个链表
    }
}

方法2、迭代思想(代码复杂但容易理解)
图解
在这里插入图片描述
**难点
n.next=root.next; //头插法,root结点后的所有元素接在n的后面
root.next=n; //将n接在root的下一个位置,n为链表的第一个元素

代码实现

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode root=new ListNode(0);  //虚设一个root结点,root为一个借助工具
        ListNode n=new ListNode(0);         //给n赋予个初始值
        while(head!=null){
            n=head;         //第一个元素赋给n
            head=head.next;     //head后移
            n.next=null;        //将n的下一个置空
            n.next=root.next;  //头插法,root结点后的所有元素接在n的后面
            root.next=n;       //将n接在root的下一个位置,n为链表的第一个元素
        }
        return root.next;   //返回新链表的头节点
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值