面试算法-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;
    }
}
相关推荐
80530单词突击赢9 分钟前
STLVector底层原理与高效运用
数据结构·算法
haluhalu.13 分钟前
LeetCode---基础算法刷题指南
数据结构·算法·leetcode
iAkuya18 分钟前
(leetcode)力扣100 58组合总和(回溯)
算法·leetcode·职场和发展
80530单词突击赢19 分钟前
C++关联容器深度解析:set/map全攻略
java·数据结构·算法
m0_5613596720 分钟前
代码热更新技术
开发语言·c++·算法
Warren9830 分钟前
Pytest Fixture 作用域详解:Function、Class、Module、Session 怎么选
面试·职场和发展·单元测试·pytest·pip·模块测试·jira
_F_y44 分钟前
链表:重排链表、合并 K 个升序链表、K 个一组翻转链表
数据结构·链表
xu_yule1 小时前
算法基础—组合数学
c++·算法
爱尔兰极光1 小时前
LeetCode--移除元素
算法·leetcode·职场和发展
努力学算法的蒟蒻1 小时前
day73(2.1)——leetcode面试经典150
面试·职场和发展