【LeetCode-链表】两两交换链表中的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

题目链接: https://leetcode-cn.com/problems/swap-nodes-in-pairs/

思路

使用 3 个指针:当前节点 curNode,当前节点的前一个节点 preNode,当前节点的下一个节点 nextNode。

交换两个节点的步骤如下:

  • curNode->next = nextNode->next;
  • nextNode->next = curNode;(两个节点交换完成)
  • preNode->next = nextNode;(更改 preNode 的指向)
  • pre = curNode; (更新 preNode 和 curNode)
  • curNode = curNode->next;

代码如下:

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

        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* pre = dummy;
        ListNode* curNode = head;
        while(curNode!=nullptr && curNode->next!=nullptr){ // 注意条件
            ListNode* nextNode = curNode->next;
            curNode->next = nextNode->next;
            nextNode->next = curNode;
            pre->next = nextNode;
            pre = curNode;
            curNode = curNode->next;
        }
        return dummy->next;
    }
};
  • 时间复杂度: O(n)
  • 空间复杂度:O(1)
posted @   Flix  阅读(165)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)
点击右上角即可分享
微信分享提示