LeetCode 206. 反转链表 java版 多种简单方式,总有一款适合你!超级简单易懂的反转链表 java
发布日期:2025-04-04 23:09:19 浏览次数:11 分类:精选文章

本文共 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;        }    }}

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

    上一篇:Leetcode 21. Merge Two Sorted Lists
    下一篇:LeetCode 205

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月16日 02时35分46秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    element-ui:el-input输入数字-整数和小数 2025-03-29
    ElementUI-el-progress改变进度条颜色跟文字样式 2025-03-29
    ELK应用日志收集实战 2025-03-29
    elTable火狐浏览器换行 2025-03-29
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2023年深信服、奇安信、360等大厂网络安全校招面试真题合集(附答案),让你面试轻松无压力! 2025-03-29
    2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2025-03-29
    0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2025-03-29
    100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-29
    10个程序员可以接私活的平台 2025-03-29
    10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2025-03-29
    10条sql语句优化的建议 2025-03-29
    10款宝藏编程工具!新手必备,大牛强烈推荐! 从零基础到精通,收藏这篇就够了! 2025-03-29
    10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了 2025-03-29
    15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2025-03-29
    15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2025-03-29
    2023应届毕业生找不到工作很焦虑怎么办? 2025-03-29
    2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2025-03-29
    2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2025-03-29