面试算法-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;
    }
}
相关推荐
6Hzlia2 分钟前
【Hot 100 刷题计划】 LeetCode 215. 数组中的第K个最大元素 | C++ 快速选择与堆排序题解
c++·算法·leetcode
小白菜又菜3 分钟前
Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k
算法·leetcode·职场和发展
笨笨饿17 分钟前
32_复变函数在工程中实际应用区别于联系
linux·服务器·c语言·人工智能·单片机·算法·学习方法
会编程的土豆24 分钟前
【数据结构与算法】拓扑排序2
数据结构·算法·leetcode
Boop_wu30 分钟前
[Java 算法] 栈
java·开发语言·算法
追风落叶乔木生31 分钟前
字节跳动后端一面全解析|基础+算法真题(2026最新版)
算法·哈希算法
不爱吃炸鸡柳31 分钟前
C++ STL 核心:string 从入门到精通(面试+源码+OJ实战)
java·c++·面试
来自远方的老作者31 分钟前
第7章 运算符-7.5 比较运算符
开发语言·数据结构·python·算法·代码规范·比较运算符
We་ct37 分钟前
LeetCode 201. 数字范围按位与:位运算高效解题指南
开发语言·前端·javascript·算法·leetcode·typescript
wanderist.38 分钟前
图论模板整理
算法·深度优先·图论