92 反轉鍊錶 II(C )

2022-10-08 18:12:17 字數 1556 閱讀 6215

目錄給你單鏈表的頭指標head和兩個整數leftright,其中left<=right。請你反轉從位置left到位置right的鍊錶節點,返回 反轉後的鍊錶 。

示例 1:

輸入:head = [1,2,3,4,5], left = 2, right = 4

輸出:[1,4,3,2,5]

示例 2:

輸入:head = [5], left = 1, right = 1

輸出:[5]

對於鍊錶的問題,一般都是要建乙個dummy node連上原鍊錶的頭結點,以此來規範頭節點變動和其他節點變動的**,進行格式統一。以題目中的例子來說,變換的是 2,3,4 這三個點,我們需要找到第乙個開始變換結點的前乙個結點,只要讓 pre 向後走 m-1 步即可,用 pre 指向它。由於一次只能交換兩個結點,所以我們按如下的交換順序:

1 -> 2 -> 3 -> 4 -> 5 -> null

1 -> 3 -> 2 -> 4 -> 5 -> null // 第一次變換將結點 3 放到結點 1 的後面

1 -> 4 -> 3 -> 2 -> 5 -> null // 第二次變換將結點 4 放到結點 1 的後面

可以看出來,總共需要right-left步即可,因為每次變換都是規律的操作,就以第一次變換進行舉例。剛開始,pre指向結點 1,cur指向結點 2,然後我們建立乙個臨時的結點tmp用臨時變數儲存某個結點就是為了首先斷開該結點和前面結點之間的聯絡,這可以當作乙個規律記下來。每一次節點交換分為以下三個步驟:

這裡跟常見的鍊錶反轉最大的區別在於以前prev、cur會向隨著鍊錶遍歷反轉逐漸向後移動,這裡的prev、cur其實指向並沒有改變。即這裡的prev一直是1, cur一直是2,是cur->next一直在變化

完整**如下:

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class solution

return dummy->next;}};

92 反轉鍊錶 IIC語言

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null m 2,n 4輸出 1 4 3 2 5 null 通過次數115 960提交次數219 660 第一種思路 重新申請鍊錶空間 在給定區間使用頭插法 在非給定區間使用尾插法第二...

Leetcode 92 反轉鍊錶 II C

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null用乙個指標ahead指向m的前乙個節點,先找到第m個節點p,同時用after指向p next,反轉操作便是p next after...

92 反轉鍊錶 II

反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4輸出 1 4 3 2 5 null definition for singly linked list.struct listnode class soluti...