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;
    }
}
相关推荐
HZZD_HZZD1 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
珠海西格电力2 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
山登绝顶我为峰 3(^v^)34 小时前
C/C++ 交叉编译方法
java·c语言·c++
一叶飘零_sweeeet4 小时前
Codex 与 Claude Code 深度拆解:两代 AI 编程智能体的技术本质与 Java 实战指南
java·ai·codex·claude code
Listen·Rain4 小时前
提示词和提示词模板
java·人工智能·spring boot
还有多久拿退休金4 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
wuqingshun3141594 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
我今晚不熬夜5 小时前
Java语言实现Modbus协议通过用串口读取数据(以RTU为例)
java·网络协议
小锋java12345 小时前
Maven 4 要来了:15 年后,Java 构建工具迎来"彻底重构"
java·maven