博客
关于我
LeetCode 206. 反转链表 java版 多种简单方式,总有一款适合你!超级简单易懂的反转链表 java
阅读量:794 次
发布时间:2023-01-30

本文共 2131 字,大约阅读时间需要 7 分钟。

反转链表是一项常见的操作,可以通过迭代或递归方法实现。本文将分别介绍两种方法,并通过示例验证它们的正确性。

迭代方法:这种方法的思路是创建一个新链表,将旧链表的节点依次从末尾插入到新链表的开头。具体步骤如下:

  • 初始化新的链表头部为 null
  • 从旧链表的尾部开始遍历,逐步移动节点。
  • 对于每个节点,将其加入到新链表的开头位置。
  • 代码示例如下:

    public class ChainTest {    public static ListNode reverseNode(ListNode head) {        ListNode prev = null;        ListNode cur = head;        while (cur != null) {            ListNode next = cur.next;            cur.next = prev;            prev = cur;            cur = next;        }        return prev;    }    public static void main(String[] args) {        ListNode n5 = new ListNode(5);        ListNode n4 = new ListNode(4, n5);        ListNode n3 = new ListNode(3, n4);        ListNode n2 = new ListNode(2, n3);        ListNode n1 = new ListNode(1, n2);        ListNode reversed = reverseNode(n1);        while (reversed != null) {            System.out.println(reversed.value);            reversed = reversed.next;        }    }    static class ListNode {        private int value;        private ListNode next;        public ListNode(int value) {            this.value = value;        }        public ListNode(int value, ListNode next) {            this.value = value;            this.next = next;        }    }}

    递归方法:递归方法的思路是将问题分解,假设反转链表的子节点,然后将当前节点插入到反转后的链表开头。

  • 递归终止条件:当没有节点或只有一个节点时,返回当前节点。
  • 递归步骤:
    • 反转子节点(head.next),得到结果。
    • 将当前节点插入到反转结果的前面。
  • 代码示例如下:

    public class ChainTest {    public static ListNode reverseNode(ListNode head) {        if (head == null || head.next == null) {            return head;        }        ListNode last = reverseNode(head.next);        head.next.next = head;        head.next = null;        return last;    }    public static void main(String[] args) {        ListNode n5 = new ListNode(5);        ListNode n4 = newώνα付款链接节点(4, n5);        ListNode n3 = new ListNode(3, n4);        ListNode n2 = new Λ Nodes(2, n3);        ListNode n1 = new ListNode(1, n2);        ListNode reversed = reverseNode(n1);        while (reversed != null) {            System.out.println(reversed.value);            reversed = reversed.next;        }    }}

    通过以上两种方法,可以轻松实现链表的反转。迭代法推荐用于处理较多节点的情况,因其避免了递归可能导致的栈溢出问题。而递归方法则更便于代码的阅读和理解。根据具体需求选择合适的方法即可。

    转载地址:http://nagyk.baihongyu.com/

    你可能感兴趣的文章
    Kubernetes学习总结(14)—— Kubernetes 实用命令总结
    查看>>
    Kubernetes学习总结(15)—— Kubernetes 实战之部署 Mysql 集群
    查看>>
    Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
    查看>>
    Kubernetes学习总结(17)—— Kubernetes 快速入门需要掌握的知识点总结
    查看>>
    Kubernetes学习总结(18)—— Kubernetes 容器网络
    查看>>
    Kubernetes学习总结(1)——Kubernetes入门简介
    查看>>
    Kubernetes学习总结(2)——Kubernetes设计架构
    查看>>
    Kubernetes学习总结(3)——一年时间打造全球最大规模之一的Kubernetes集群,蚂蚁金服怎么做到的?
    查看>>
    Kubernetes学习总结(4)——Kubernetes v1.20 重磅发布 | 新版本核心主题 & 主要变化解读
    查看>>
    Kubernetes学习总结(5)——Kubernetes 常见面试题汇总
    查看>>
    Kubernetes学习总结(6)——Kubernetes 7周年:它为什么如此受欢迎?
    查看>>
    Kubernetes学习总结(7)——学习 Kubernetes 的 Pod
    查看>>
    Kubernetes学习总结(8)—— Kubernetes Pod 资源管理 和 Pod 服务质量
    查看>>
    Kubernetes学习总结(9)—— 基础架构的未来是 K8s,那么 K8s 的未来在何方?
    查看>>
    kubernetes实战(十三):k8s使用helm持久化部署harbor集成openLDAP登录
    查看>>
    Kubernetes实战(一)-Kubernetes集群搭建
    查看>>
    Kubernetes实战(七)-优先级调度(Pod Priority Preemption)
    查看>>
    Kubernetes实战(三十一)-Calico网络部署(推荐)
    查看>>
    Kubernetes实战(三十三)-外部Etcd集群部署与调优(更安全的数据存储策略)
    查看>>
    Kubernetes实战(三十二)-Kubeadm 安装 Kubernetes v1.24.0
    查看>>