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

题目:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 

示例 1:

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


示例 2:

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


示例 3:

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

提示:

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

解答:

自己的代码,使用三个ListNode*,pFront,p1,p2,三个节点的交换逻辑如下:

//swap
pFront->next = p2->next;
p2->next = p1;
p1->next = pFront->next;
pFront->next = p2;

//24. 两两交换链表中的节点
ListNode* swapPairs(ListNode* head) 
{
    if (head == nullptr)
        return nullptr;

    ListNode dummy;
    dummy.next = head;

    ListNode*pFront = &dummy;
    ListNode* p1 = pFront->next, *p2=nullptr;
    while (pFront != nullptr)
    {
        p1 = pFront->next;
        if (p1 == nullptr)
            break;

        p2 = p1->next;
        if (p2 == nullptr)
            break;

        //swap
        pFront->next = p2->next;
        p2->next = p1;
        p1->next = pFront->next;
        pFront->next = p2;

        //next
        pFront = p2->next;
    }

    return dummy.next;
}

一次提交后超过100%,好开心O(∩_∩)O哈哈~

题解:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/

题解中提供了两种解法:递归,迭代,自己写的思路与迭代思路类似。(自己都过了,题解就不看了哈)

 

posted @ 2020-11-17 15:26  adfas  阅读(87)  评论(0编辑  收藏  举报