中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現LeetCode的示例分析

發布時間:2021-07-09 11:07:26 來源:億速云 閱讀:117 作者:小新 欄目:開發技術

這篇文章主要介紹C++實現LeetCode的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL


很奇怪為何沒有倒置鏈表之一,就來了這個倒置鏈表之二,不過猜也能猜得到之一就是單純的倒置整個鏈表,而這道作為延伸的地方就是倒置其中的某一小段。對于鏈表的問題,根據以往的經驗一般都是要建一個dummy node,連上原鏈表的頭結點,這樣的話就算頭結點變動了,我們還可以通過dummy->next來獲得新鏈表的頭結點。這道題的要求是只通過一次遍歷完成,就拿題目中的例子來說,變換的是2,3,4這三個點,我們需要找到第一個開始變換結點的前一個結點,只要讓pre向后走m-1步即可,為啥要減1呢,因為題目中是從1開始計數的,這里只走了1步,就是結點1,用pre指向它。萬一是結點1開始變換的怎么辦,這就是我們為啥要用dummy結點了,pre也可以指向dummy結點。然后就要開始交換了,由于一次只能交換兩個結點,所以我們按如下的交換順序:

1 -> 2 -> 3 -> 4 -> 5 -> NULL

1 -> 3 -> 2 -> 4 -> 5 -> NULL

1 -> 4 -> 3 -> 2 -> 5 -> NULL

我們可以看出來,總共需要n-m步即可,第一步是將結點3放到結點1的后面,第二步將結點4放到結點1的后面。這是很有規律的操作,那么我們就說一個就行了,比如剛開始,pre指向結點1,cur指向結點2,然后我們建立一個臨時的結點t,指向結點3(注意我們用臨時變量保存某個結點就是為了首先斷開該結點和前面結點之間的聯系,這可以當作一個規律記下來),然后我們斷開結點2和結點3,將結點2的next連到結點4上,也就是 cur->next = t->next,再把結點3連到結點1的后面結點(即結點2)的前面,即 t->next = pre->next,最后再將原來的結點1和結點2的連接斷開,將結點1連到結點3,即 pre->next = t。這樣我們就完成了將結點3取出,加入結點1的后方。第二步將結點4取出,加入結點1的后方,也是同樣的操作,這里就不多說了,請大家自己嘗試下吧,參見代碼如下:

class Solution {
public:
    ListNode *reverseBetween(ListNode *head, int m, int n) {
        ListNode *dummy = new ListNode(-1), *pre = dummy;
        dummy->next = head;
        for (int i = 0; i < m - 1; ++i) pre = pre->next;
        ListNode *cur = pre->next;
        for (int i = m; i < n; ++i) {
            ListNode *t = cur->next;
            cur->next = t->next;
            t->next = pre->next;
            pre->next = t;
        }
        return dummy->next;
    }
};

以上是“C++實現LeetCode的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛川县| 牙克石市| 且末县| 社会| 克东县| 永丰县| 林西县| 资讯| 霞浦县| 民丰县| 峨山| 合山市| 全州县| 丰台区| 茂名市| 久治县| 林口县| 大渡口区| 卓尼县| 阳泉市| 平江县| 望谟县| 兰坪| 元阳县| 滦南县| 托克逊县| 余庆县| 临夏市| 那坡县| 连州市| 绥宁县| 赣州市| 沽源县| 都安| 湘阴县| 博兴县| 隆尧县| 兴文县| 界首市| 大理市| 仙居县|