CanTechLab

Can

Leetcode:24.两两交换链表中的节点

2024-05-31

Leetcode题目链接:24. 两两交换链表中的节点

题目描述

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

题目示例

示例一

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

示例二

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

示例三

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

解题思路

循环递归逐一交换,执行流程如下图所示

我的答案

/**
 * 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* dummyHead = new ListNode();
        ListNode *front = nullptr, *rear = nullptr;
        dummyHead->next = head;
        ListNode* currrent = dummyHead;
        while(currrent->next != nullptr && currrent->next->next != nullptr) {
            //记录指针
            front = currrent->next;
            currrent->next = currrent->next->next;
            rear = currrent->next->next;
            //改变指针指向
            currrent->next->next = front;
            front->next = rear;
            //指针后移
            currrent = front;      
        }
        return dummyHead->next;
    }
};

提交结果