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

63 阅读1分钟

题目描述

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

本题思路

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode*dummyHead=new ListNode(0);
        dummyHead->next=head;
        ListNode*cur=dummyHead;
        while(cur->next!=nullptr&&cur->next->next!=nullptr){//while的判断条件即已经确定是两两之间的操作,只剩一个会跳出循环
            ListNode*tmp=cur->next;//存储第一个节点
            ListNode*tmp1=cur->next->next->next;//存储第三个节点
            cur->next=cur->next->next;//虚拟头节点与第一个节点断开链接,指向第二个节点
            cur->next->next=tmp;//第二个节点指向第一个节点,第二个节点与第三个节点断开链接
            tmp->next=tmp1;

            cur=cur->next->next;
        }
        return dummyHead->next;

因为在虚拟头节点指向新的第一个节点时,相当于断开以前的第一个节点的指向所以需要先存储第一个节点。

存储第三个节点也类似。