两两交换链表中的节点

发布时间 2023-11-18 22:24:05作者: Vincetes

现在时间是:   20231118日 星期六    农历十月初六   22:08:
每天坚持刷Leetcode,遇到有些突然看到就不能想得很清楚的题目,还是需要进行记录一下!

Leetcode热题100(学习计划):两两交换链表中的节点,题目信息如下:
  给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

题目信息如上:
我的想法是,本道题目打直球,没有什么算法思维,就是需要控制好边界条件,以及创立一些节点:

 

在设计算法思路的时候,主要就是设定好相关的begin和end节点即可,代码展示如下:

/**
 * 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) {
        if(!head) return nullptr;
        //不修改节点内部的值,即交换两个节点
        ListNode* node = new ListNode(0);
        node->next = head;
        ListNode* s = node;
        while(head != nullptr && head->next != nullptr){
            //交换节点
            ListNode* cur = head->next->next;
            ListNode* pre = head->next;
            pre->next = head;
            head->next = cur;
            s->next = pre;
            s = head;
            head = head->next;
        }
        
        return node->next;
    }
};