LeetCode--24.两两交换链表中的节点(链表)

题目描述

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

示例 1:

复制代码
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

复制代码
输入:head = []
输出:[]

示例 3:

复制代码
输入:head = [1]
输出:[1]

提示:

  • 链表中节点的数目在范围 [0, 100]
  • 0 <= Node.val <= 100

解题思路

注意prev指针要正确指向下一组nextPair

代码

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode cur = head;
        // 边缘条件判断
        if(head == null || cur.next == null){
            return head;
        }
        // 重置头结点
        head = cur.next;
        // 记录下一组
        ListNode nextPair = cur.next.next;
        // 记录prev指针
        ListNode prev = cur;
        cur.next.next = cur;
        cur.next = nextPair;
        // 跳至下一组
        cur = nextPair;

        // 若组不成一组不需要反转
        while(nextPair != null && cur.next != null){
            prev.next = cur.next;
            prev = cur;
            nextPair = cur.next.next;
            cur.next.next = cur;
            cur.next = nextPair;
            cur = nextPair;
        }

        return head;
    }
}
相关推荐
圣保罗的大教堂9 小时前
leetcode 2029. 石子游戏 IX 中等
leetcode
君顾19 小时前
智慧场馆解决方案小程序系统实战:从架构设计到上线指南
java·开发语言·智慧场馆
zhougl9969 小时前
Dockerfile实战教程
java·开发语言·spring boot
新时代牛马9 小时前
Linux 驱动调试完整篇:从printk/dev_dbg、动态调试到 debugfs/ftrace 排障
java·linux·服务器
计算机毕设定制辅导-无忧学长9 小时前
《基于Spring Boot传承之光非遗陶瓷烧造产品交易平台的设计与实现》
java·vue.js·spring boot·后端·毕业设计
Zane19949 小时前
内存都要回收,为什么JVM偏要把堆分成新生代和老年代
java·后端
Terra.K9 小时前
后端开发阶段性总结
java·开发语言·后端
刘广睿9 小时前
素材去重为什么难?文件指纹、感知哈希与相似度判定的设计笔记
算法·哈希算法·产品设计·素材管理
计算机学姐9 小时前
基于SpringBoot的旅游系统的设计与实现
java·vue.js·spring boot·后端·spring·java-ee·旅游
卷心菜的学习路9 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
java·spring boot·后端