栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

24. 两两交换链表中的节点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

24. 两两交换链表中的节点

题目:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思考:

1. 两两交换,首先想到了各种断开重组的情况,想到了用双指针的方式做;

2. 断开后重组的过程可以分为两步

1)断开形成两个新的子链表,链表结构为所有双数index的链表,和所有单数index的链表

2)将这两个新的子链表合并,从单数开始合并,单数放到偶数前,直到遍历结束

2)双数index的链表个数>=单数index链表的个数,可在遍历时将其作为结束条件

3. 注意边界情况

!!MARK一下第一次执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

代码:
    public static ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode a = head;
        ListNode b = head.next;
        ListNode m = head;
        ListNode n = head.next;

        while (a != null && b!= null) {
            a.next = b.next;
            a = a.next;
            if (a == null) {
                b.next = null;
                break;
            }
            b.next = a.next;
            b = b.next;
        }

        ListNode result = n;
        while (m != null && n!= null) {
            ListNode k = m.next;
            ListNode x = n.next;
            if (n.next == null) {
                n.next = m;
                break;
            }
            m.next = n.next;
            n.next = m;
            m = k;
            n = x;
        }
        return result;

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号