反转链表-递归-代码-示例

举报
yd_248793506 发表于 2024/01/20 15:33:18 2024/01/20
【摘要】 反转链表,递归实现,包含代码和可视化演示过程

反转链表-递归-代码-示例

代码实现

import java.util.*;

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        // 递归调用,找到原链表的最后一个节点,并将其作为新链表的头节点
        ListNode newHead = ReverseList(head.next);

        // 调整节点指向,实现链表反转
        head.next.next = head;
        head.next = null;

        return newHead;
    }
}

示例数据和反转过程

初始链表

1 -> 2 -> 3 -> 4

第一次递归调用

调用 ReverseList(head),其中 head 是指向第一个节点 1 的指针。

第二次递归调用

进入第一次递归调用,继续调用 ReverseList(head.next),其中 head.next 是指向第二个节点 2 的指针。

第三次递归调用

进入第二次递归调用,继续调用 ReverseList(head.next),其中 head.next 是指向第三个节点 3 的指针。

第四次递归调用

进入第三次递归调用,继续调用 ReverseList(head.next),其中 head.next 是指向第四个节点 4 的指针。

递归基准条件

在第四次递归调用中,head4,触发递归基准条件,直接返回当前节点 4 作为新的头节点 newHead

递归回溯

在递归回溯的过程中,对每个节点执行以下操作:

head.next.next = head;
head.next = null;

以节点 3 为例,执行后的链表状态如下:

1 -> 2 -> 3 <- 4

对节点 21 分别执行相同的操作,得到:

1 <- 2 <- 3 <- 4

返回结果

最终,newHead 指向反转后的链表的头节点,即节点 4。整个链表变为:

4 -> 3 -> 2 -> 1

注意事项

  • 在使用递归时,请确保链表不会太长,以免导致栈溢出。对于极长的链表,可能需要考虑使用迭代方法。
  • 确保链表节点的定义与提供的 ListNode 类一致,包含一个整数值 val 和一个指向下一个节点的指针 next
  • 在实际应用中,可以根据具体需求进行适当的修改和优化,确保代码符合项目的整体结构和规范。

希望这一篇文档能够帮助您理解链表反转的代码实现和执行过程。如果您有其他疑问,请随时提出。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。