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

【Java数据结构与算法】LeetCode 0024.两两交换链表中的节点

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

【Java数据结构与算法】LeetCode 0024.两两交换链表中的节点

LeetCode 0024. 两两交换链表中的节点

原题链接:24. 两两交换链表中的节点 - 力扣(LeetCode)

一、 思路:双指针

用到 pre 和 temp 两个指针,此外,还可以把传入的参数 head 也当作节点的指针加以利用。代码一下子就简洁很多了。

做这种题一定要画图,不然很容易把自己绕晕了。

二、 代码实现
public static ListNode swapPairs(ListNode head) {
    if (head == null || head.next == null) { //如果传入的链表为空或仅有一个节点,则直接返回原链表
        return head;
    }
    ListNode virHead = new ListNode(0, head); //创建虚拟头节点
    ListNode pre = virHead; //前指针
    ListNode temp = null; //创建辅助节点
    while (pre.next != null && pre.next.next != null) { //这样的循环条件可以一举解决奇偶节点数量问题
        temp = head.next.next; //缓存head指针后移位置
        pre.next = head.next; //步骤①
        head.next.next = head; //步骤②
        head.next = temp; //步骤③
        //指针后移
        pre = head; //pre后移2位
        head = head.next; //head后移1位
    }
    return virHead.next;
}
三、 总结
  • 在链表类的题目中,temp 辅助节点在绝大多数情况下,是用来缓存链表变动前给指针往后移动的位置的。在操作过程中绝不允许改变 temp 和 temp.next 。
  • 有时候传入的参数 head 也可以作为指针使用。即可以往后移动更新其位置。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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