LeetCode-206. 反转链表-Java实现

本文详细介绍了链表反转的两种实现方式:递归和非递归。递归方法通过不断调用自身,将链表逐段反转;非递归方法则利用循环,直接调整节点指针指向,效率更高。文章深入解析了每种方法的实现逻辑与过程。

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

实现效果

非递归实现

在这里插入图片描述

public ListNode reverseList(ListNode head) {
        if(head==null){
            return null;
        }else if(head.next==null){
            return head;
        }
        
        ListNode now = head;
        ListNode nextNextTemp = null;
        ListNode next = null;
        ListNode pre = null;
        do{
           next = now.next;
            if(next==null){
                now.next = pre;
                pre = now;
                break;
            }
           nextNextTemp = next.next;
           next.next = now;
           now.next = pre;
           pre = next;
            now = nextNextTemp;
        }while(now!=null);
        return pre;
    }

递归实现

在这里插入图片描述

public ListNode reverseList(ListNode head) {
        if(head==null){
            return null;
        }else if(head.next==null){
            return head;
        }else{
            ListNode next = head.next;
            ListNode result = null;
            if(next.next==null){
                next.next = head;
                head.next = null;
                result = next;
            }else{
                result = reverseList(next);
                next.next = head;
                head.next = null;
            }
            return result;
        }
    }

过程

递归实现

实现起来先实现的是递归方法,其实就是把任务分解成一个循环重复的步骤,我习惯是从出口考虑的,也就是最后一层的递归,也就是将最后一个节点的next指针指向前一个(也就是这一层递归的head),然后返回最后一个节点的引用(指针),然后前面的迭代就是把之前引用的本层的next节点的next(也就是next.next)指向本层的head,因为next节点是下一轮返回来的ListNode的最后一个节点,所以应该指向head,倒回去后,在第一层返回这个节点就可以了,记得要把head.next设为空,要不然就死循环了。

非递归实现

非递归实现在时间上更快,因为其少了方法的嵌套(也就是少了方法的出栈入栈操作),具体而言就是一个循环,每一次的循环就是把链表截断成两部分,一部分是反向后的,一部分是未反向,每一次循环就是从未反向的链表中拿出一个来放到反向后的末尾,知道最后发现节点为NULL时就结束了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值