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 針對上述問題我能想到的一種辦法就是以壓棧的方式來實現,其實現思路相對較為簡單,通過定義乙個鍊錶資料結構的資料棧,遍歷鍊錶,...