当前位置: 首页 > news >正文

LeetCode - 24 两两交换链表中的节点

题目来源

24. 两两交换链表中的节点 - 力扣(LeetCode)

题目描述

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

示例

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

提示

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

题目解析

本题主要考察数据结构。

对于输入的链表,我们可以为其定义一个虚拟头节点 dummy_head,比如示例1,进行如下逻辑

C源码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* swapPairs(struct ListNode* head) {
    struct ListNode* dummy_head = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy_head->val = 0;
    dummy_head->next = head;

    struct ListNode* pre = dummy_head;
    struct ListNode* cur = pre->next;

    while (cur != NULL && cur->next != NULL) { // 由于要交换cur和cur.next两个节点,因此二者不能为null
        struct ListNode* nxt = cur->next;

        cur->next = nxt->next;
        nxt->next = cur;
        pre->next = nxt;

        pre = cur;
        cur = pre->next;
    }

    return dummy_head->next;
}

C++源码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy_head = new ListNode(0, head);

        ListNode* pre = dummy_head;
        ListNode* cur = pre->next;

        while (cur != nullptr && cur->next != nullptr) { // 由于要交换cur和cur.next两个节点,因此二者不能为null
            ListNode* nxt = cur->next;

            cur->next = nxt->next;
            nxt->next = cur;
            pre->next = nxt;

            pre = cur;
            cur = pre->next;
        }

        return dummy_head->next;
    }
};

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 dummy_head = new ListNode(0, head);

        ListNode pre = dummy_head;
        ListNode cur = pre.next;

        while (cur != null && cur.next != null) { // 由于要交换cur和cur.next两个节点,因此二者不能为null
            ListNode nxt = cur.next;

            cur.next = nxt.next;
            nxt.next = cur;
            pre.next = nxt;

            pre = cur;
            cur = pre.next;
        }

        return dummy_head.next;
    }
}

Python源码实现

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def swapPairs(self, head):
        """
        :type head: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        dummy_head = ListNode(0, head)

        pre = dummy_head
        cur = pre.next

        while cur and cur.next:  # 由于要交换cur和cur.next两个节点,因此二者不能为null
            nxt = cur.next

            cur.next = nxt.next
            nxt.next = cur
            pre.next = nxt

            pre = cur
            cur = pre.next
        
        return dummy_head.next
        

JavaScript源码实现

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function (head) {
    const dummy_head = new ListNode(0, head);

    let pre = dummy_head;
    let cur = pre.next;

    while (cur != null && cur.next != null) { // 由于要交换cur和cur.next两个节点,因此二者不能为null
        const nxt = cur.next;

        cur.next = nxt.next;
        nxt.next = cur;
        pre.next = nxt;

        pre = cur;
        cur = pre.next;
    }

    return dummy_head.next;
};

相关文章:

  • PHP入门基础学习七(函数3)
  • WIn32 笔记:本专栏课件
  • Oracle管理员高级操作的详细步骤说明,涵盖性能优化、安全管理、高可用性配置等核心内容
  • Halcon 3D加快表面匹配速度
  • [深度学习]基于C++和onnxruntime部署yolov12的onnx模型
  • Git add --- error: Filename too long
  • 代码随想录DAY35|01背包问题、416. 分割等和子集
  • DeepSeek开源周Day1:重磅发布FlashMLA,重新定义AI推理效率天花板
  • AI顿悟之旅 - 1 - DeepSeek的训练方法为什么相比GPT-o1大幅度减少算力资源?
  • Windows与Ubuntu安装MySQL
  • Sqlserver安全篇之_隐藏实例功能和禁用SQL Server Browser服务
  • 银河麒麟高级服务器操作系统通用rsync禁止匿名访问操作指南
  • 【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级
  • wifi5和wifi6,WiFi 2.4G、5G,五类网线和六类网线,4G和5G的区别
  • 本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
  • windows中kafka集群部署示例
  • PHP 连接 Memcached 服务
  • Redis持久化机制与数据恢复
  • PHP入门基础学习三(PHP基本语法)
  • 【音视频】音视频录制、播放原理
  • 泽连斯基:乌代表团已启程,谈判可能于今晚或明天举行
  • 新华时评:让医德医风建设为健康中国护航
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • “一百零一个愿望——汉字艺术展”亮相意大利威尼斯
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作