面试算法-163-两两交换链表中的节点

题目

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

示例 1:

输入:head = 1,2,3,4

输出:2,1,4,3

java 复制代码
class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode p1 = dummy;
        ListNode p2 = head;
        ListNode p3 = head.next;
        ListNode next = null;
        while (p3 != null) {
            next = p3.next;

            p1.next = p3;
            p3.next = p2;
            p2.next = next;

            p1 = p2;
            p2 = next;
            p3 = p2 == null ? null : p2.next;
        }
        return dummy.next;
    }
}
相关推荐
PhotonixBay8 分钟前
从粗糙度到三维形貌:激光共聚焦显微镜实现微米级表面分析
图像处理·人工智能·测试工具·算法
2401_8628808219 分钟前
数据结构 --- 算法
数据结构·算法
程序员爱钓鱼28 分钟前
Rust 泛型 Generics详解:编写可复用且类型安全的代码
后端·面试·rust
个 人 练 习 生32 分钟前
数据结构链表:带头双向循环链表
c语言·数据结构·经验分享·学习·其他·链表
程序员爱钓鱼39 分钟前
Go 编程实战:指针 Pointer——理解地址、取址与解引用
后端·面试·go
血小板要健康2 小时前
二叉树 dfs 题型总结
算法·深度优先
我变成萤火虫7 小时前
河南萌新联赛2026第(四)场:南阳理工学院
数据结构·c++·算法·贪心算法·stl·动态规划
To_OC9 小时前
LC 239 滑动窗口最大值:从暴力超时到单调队列一遍过
javascript·算法·leetcode
黄敬峰10 小时前
告别 Vibe Coding!SDD 规范驱动开发实战:从文档到代码的 AI 开发新范式
面试
.道阻且长.10 小时前
9.LeetCode算法习题讲解--滑动窗口--无重复字符的最长字串
算法·leetcode·职场和发展·哈希算法