Leetcode のブラッシング ノート (C++) - 再帰

Leetcode のブラッシング ノート (C++) - 再帰

質問をブラッシュアップする過程でアイデアを整理し、ここにまとめて共有します。
github アドレス: https://github.com/lvjian0706/Leetcode-solutions
github プロジェクトは新しく作成されたばかりで、C++ と Python をベースに整理されたコードやアイデアが次々とアップロードされます。同時に、基本的な並べ替えアルゴリズムも並べ替えてアップロードされます。

24. リンクリスト内のノードを 2 つずつ交換します

リンク リストを指定すると、そのリスト内の隣接するノードを 2 つずつ交換し、交換されたリンク リストを返します。

ノード内の値を変更するだけではなく、実際にノードを交換する必要があります。

例:
1->2->3->4 の場合、2->1->4->3 を返す必要があります。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    
    
public:
    /*
    两两交换链表中相邻的节点:递归
    1. 如果链表长度小于2,不用交换直接返回;
    2. 先交换head->next->next后边的链表(只留前两个);
    3. 定义new_head(也就是结果链表的头节点)为head->next,head指向交换完的head->next->next后边链表的头指针,new_head指向head;
    */
    ListNode* swapPairs(ListNode* head) {
    
    
        if(!head || !head->next) return head;
        ListNode* temp = swapPairs(head->next->next);
        ListNode* new_head = head->next;
        head->next = temp;
        new_head->next = head;
        return new_head;
    }
};

おすすめ

転載: blog.csdn.net/weixin_43273742/article/details/107741456