翻轉鍊錶中的一段

2021-10-22 13:28:56 字數 1382 閱讀 4396

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

鍊錶、翻轉、從中間指定位置,

之前做過類似的:迭代法:3步:

1、儲存當前節點的後乙個節點,

2、後項指前項

3、前進:左邊賦值成當前節點,當前節點賦值成第一步中儲存的後乙個節點,

在此之前,先置pre=nullptr

1、這個題,根據建構函式設定dummyhead零頭節點,

2、設定臨時節點l_left:儲存翻轉之前左邊第乙個節點,為了後邊有用。

3、然後就是while(left <= right)次的翻轉,

4、再把兩個斷點連線起來,輸出結果:

return dummy_head-

>next;

// 而不是 return head; 會錯

1、new返回的就是指標,new呼叫建構函式

listnode* dummy_head=

newlistnode(0

,head)

;

2、翻轉鍊錶的3步策略,和細節設定pre=nullptr;

時間o(n)

空間o(1)

/**

* 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

listnode* l_left=t1;

// 翻轉左邊的最後元素,

t1 = t1-

>next;

ind++

;

listnode* cur = t1;

// 翻轉的第乙個元素

listnode* pre =

nullptr

;// 從翻轉第乙個元素開始,設定pre節點

listnode* t2=cur;

// 記錄第乙個節點,等最後好用

while

(left <= right)

l_left-

>next = pre;

t2->next = cur;

return dummy_head-

>next;}}

;

演算法題 翻轉鍊錶中的一段

題目 給出乙個鍊錶中的兩個指標p1和p2,將其之間的結點翻轉。思路 可以通過交換結點內的值來實現結點的翻轉,空間為o n 如果要求不能交換值,那麼僅憑p1和p2是無法翻轉的,因為不知道p1之前的節點,會掉鏈,只能翻轉p1之後的鍊錶,這個過程就類似於給定乙個頭節點,翻轉之後的鍊錶了 可以使用頭插法。交...

反轉鍊錶與反轉鍊錶中的某一段

反轉鍊錶。請使用一趟掃瞄完成反轉。public static void main string args private static node reverse node head node previous null 將null節點當作head的上一節點 node current head,nex...

鍊錶的翻轉

如何快速的實現鍊錶的翻轉,比如鍊錶a資料為 str1,str2,str3,str4,str5,str6 翻轉後則變為 str6,str5,str4,str3,str2,str1 針對上述問題我能想到的一種辦法就是以壓棧的方式來實現,其實現思路相對較為簡單,通過定義乙個鍊錶資料結構的資料棧,遍歷鍊錶,...