ペアで24スワップノード[M]二十から二リンクされたリスト内のノードを切り替えます

タイトル


リンクリストを考えると、すべての2つの隣接ノードを交換し、その頭を返します。
あなたはありませんだけで、それ自体を変更することができるノードは、リストのノードの値を変更します。
例:
 > 2 - > 3 - > 4 1-考えると、あなたは、2-> 1 - > 4 - > 3としてリストを返す必要があります。

考え


思考:横断為替

この質問は、私たちは、リスト上のペアごとの交換を必要とし、
ヘッダを交換する方法1.
リストのヘッダにセカンダリノードを追加し、何度も使用されています。ここに。

ListNode* result = new ListNode(-1);
result->next = head;

各2つのスイッチングリストする方法2.
次のノード(CUR)、現在のノード(第一)、現在のノード(第2)の現在のノードは、図中の交換原理:交換リストには3つのノードを含みます。 :


図1:交換ノードの模式図

そして、スイッチング動作は以下を達成するために:

first->next = second->next;
cur->next = second;
cur->next->next = first;

あなたが交換することができるかどうか3.どのように決定する
ことを確実にするためでなければならないスワップリストを
ので、判定条件を増やし、現在のノードの次のノードと次の次のノードが存在している必要があります。

再帰:2を考えます

簡単に図3に示すように、実際に再帰的操作である、2つのノード交換リストの各起こり得ます。


図2:再帰の模式図

C ++


  • 思考
/**
 * Definition for singly-linked list.
 * struct ListNode {
 * int val;
 * ListNode *next;
 * ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        
        if(head == nullptr || nullptr)
            return head;
        
        ListNode* result = new ListNode(0);
        result->next = head;
        ListNode* cur = result;
        while(cur->next != nullptr && cur->next->next != nullptr){
            
            ListNode* first = cur->next;
            ListNode* second = cur->next->next;
            
            //节点交换
            first->next = second->next;
            cur->next = second;
            cur->next->next = first;
            
            cur = cur->next->next;
        }
        
        return result->next;
        
    }
};
  • アイデア2
/**
 * Definition for singly-linked list.
 * struct ListNode {
 * int val;
 * ListNode *next;
 * ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        
        if(head == nullptr || head->next == nullptr)
            return head;
        
        ListNode* result = head -> next;
        head->next = swapPairs(result->next);
        result->next = head;
        return result;
        
    }
};

パイソン

参照

おすすめ

転載: www.cnblogs.com/Jessey-Ge/p/10993532.html