1. 程式人生 > >leetcode 24. 兩兩交換連結串列中的節點

leetcode 24. 兩兩交換連結串列中的節點

24. 兩兩交換連結串列中的節點

題目描述提示幫助提交記錄社群討論閱讀解答

隨機一題

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

示例:

給定 1->2->3->4, 你應該返回 2->1->4->3.

遞迴方式 
交換p 和 p.next 結點 
swapHead = p.next 
swapHead.next = p 

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head==NULL||head->next==NULL)return head;
        ListNode *temp=head->next;
        head->next=swapPairs(temp->next);
        temp->next=head;
        return temp;
    }

 我之前用的迴圈方式,不知道為啥總是錯的,至今也沒有想明白,但是這個要考慮的小細節太多了

//     ListNode *p=head;
    //     ListNode *q=head->next;
    //     ListNode *root=new ListNode(0);
    //     ListNode *r=root;
    //     ListNode *mp=p,*mq=q;
    //     root->next=q;
    //      while(p->next->next!=NULL&&q->next->next!=NULL){
    //         mp=p;mq=q;
    //         p=p->next->next;
    //         q=q->next->next;
    //         r->next=mq;
    //         mq->next=mp;
    //         mp->next=p;
    //         r=r->next->next;
    //     }
    //     if(p->next->next==NULL&&q->next==NULL)
    //     {
    //              r->next=q;
    //              q->next=p;
    //      }
    //     else if(p->next->next!=NULL&&q->next->next==NULL){
    //             mp=p;mq=q;
    //             r->next=mq;
    //             mq->next=mp;
    //             mp->next=q->next;  
    //          }   
    //     return root->next;
    // }

正確的迴圈方式:

加上頭結點,利用頭結點進行交換

public class Solution {
    /**
     * @param head a ListNode
     * @return a ListNode
     */
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        head = dummy;
        while (head.next != null && head.next.next != null) {
            ListNode n1 = head.next, n2 = head.next.next;
            // head->n1->n2->...
            // => head->n2->n1->...
            head.next = n2;
            n1.next = n2.next;
            n2.next = n1;

            // move to next pair
            head = n1;
        }

        return dummy.next;
    }
}

相關推薦

[Leetcode] 24. 交換連結串列節點 java

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3 /** * Definition for singly-linked list. * public clas

Leetcode刷題筆記——24交換連結串列的的節點連結串列專題)關於連結串列的操作

由於最近在學c++,在看c++primer,所以leetcode做的題也不是很多了,這個題是很長時間做的,一直想寫一下部落格 但是一直沒來得及,現在我說一下我做這道題的思路: 首先我用的是左右指標來操作連結串列的,所以必須定義兩個指標即左指標和右指標,因此想定義一個左指標和右指標得

LeetCode---24. 交換連結串列節點

題目來源:https://leetcode-cn.com/problems/swap-nodes-in-pairs/description/ 題目描述: 演算法描述:該題目有兩種方法解決,一種遞迴,一種非遞迴 非遞迴方法: 1.如果連結串列只有一個或者沒有節點的話,直接返回he

LeetCode 24——交換連結串列節點

1. 題目 2. 解答 新建一個哨兵結點作為頭結點,然後每次交換相鄰兩個結點。並依次將它們連線到新連結串列中去,再將原連結串列中後面的結點也串到新連結串列後面。直至到達鏈尾或者剩餘一個節點,則此時返回新連結串列的頭結點,也即是原始連結串列的第二個結點。 /** * Definition f

LeetCode : 24. 交換連結串列節點(Swap Nodes In Pairs)解答

24. 兩兩交換連結串列中的節點 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額

LeetCode24 交換連結串列節點

解題思路: 1 重點:如何在交換完了之後,獲得進行交換動作的兩個節點的前驅節點;思路和反轉連結串列類似,維護一個前驅節點即可。 程式碼: /** * Definition for singly-linked list. * public class ListNode

leetcode 24 交換連結串列節點

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交

LeetCode-24. 交換連結串列節點

題目 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點

Leetcode(24)交換連結串列節點

題目描述 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換

LeetCode24.交換連結串列節點

題目描述: 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1−>2−>3−>41->2->3->41−>2−>3−>4

LeetCode 24. 交換連結串列節點(C、C++、python)

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交

leetcode 24:交換連結串列節點

遞迴即可 ListNode* swapPairs(ListNode* head) { if(head==NULL) return NULL; ListNode* l1=head; ListNode *l2=new ListNode

LeetCode24.交換連結串列節點

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3 思路:因為都是先交換兩個節點,在合併。即可以轉化為子問題求解。 class Solutio

LeetCode-24:Swap Nodes in Pairs(交換連結串列節點) -- Medium

題目: Given a linked list, swap every two adjacent nodes and return its head. 例子: Example 1: Given 1->2->3->4, you s

Leetcode做題日記:24. 交換連結串列節點(PYTHON)

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

LeetCode演算法題24交換連結串列節點解析

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明: 你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是

LeetCode 24 — Swap Nodes in Pairs(交換連結串列節點)

Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3->4, you should return the l

[LeetCode]24. Swap Nodes in Pairs交換連結串列節點

Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3->4, you should return the list as

leetcode 24交換連結串列節點

24. 兩兩交換連結串列中的節點 題目描述提示幫助提交記錄社群討論閱讀解答 隨機一題 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3.

LeetCode 24. 交換連結串列節點(C++)

題目: 給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 說明