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;
    }
}
相关推荐
Jack203 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树4 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
唐青枫8 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马9 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261359 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613510 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
JieE21220 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21221 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程