面试算法-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;
    }
}
相关推荐
词元Max3 分钟前
4.2 决策树与随机森林
算法·决策树·随机森林
菜菜的顾清寒11 分钟前
力扣HOT100(51) 动态规划-单词拆分
算法·leetcode·动态规划
风筝在晴天搁浅20 分钟前
剑指Offer LCR 143.子结构判断
算法
咖啡八杯29 分钟前
GoF设计模式——装饰模式
java·算法·设计模式·装饰器模式
装不满的克莱因瓶31 分钟前
实现矩阵的点积:从数学原理到 NumPy 实战
人工智能·线性代数·算法·机器学习·矩阵·numpy
HZ·湘怡31 分钟前
树 的定义 与 性质
算法·
梦想的颜色31 分钟前
Docker 入门指南:从零开始掌握容器化技术
运维·服务器·vscode·python·算法·docker·云原生
晚风吹红霞32 分钟前
C++ list 容器完全指南:从入门到手撕双向链表
c++·链表·list
cpp_250134 分钟前
P10109 [GESP202312 六级] 工作沟通
数据结构·c++·算法·题解·洛谷·gesp六级
吴可可12334 分钟前
CAD二次开发中多段线定点分割技巧
算法