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

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

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

示例 1:

img

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

示例 2:

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

示例 3:

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

提示:

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

思路:

​ 直接用了最简单的暴力,用三个指针去不断迭代,最后得出的就是答案。不过在这类题目中使用一个虚拟头结点可以省不少事:)(个人认为)

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy=new ListNode(-1);
        dummy->next=head;
        ListNode* p1=dummy;
        ListNode* p2=dummy->next;
        if(p2==nullptr)return  nullptr;
        ListNode* p3=head->next;
        if(p3==nullptr)return head;

        //p2,p3有一个为空就终止循环
        while(p2!=nullptr&&p3!=nullptr){
            p2->next=p3->next;
            p3->next=p2;
            p1->next=p3;
            p1=p2;
            p2=p1->next;
            if(p2==nullptr)break;
            p3=p2->next;
        }
        return dummy->next;
    }
};
posted @ 2022-05-12 09:11  BailanZ  阅读(18)  评论(0编辑  收藏  举报