將乙個鍊錶m
位置到n
位置之間的區間反轉,要求時間複雜度為o(n
)o(n)
o(n)
,空間複雜度為o(1
)o(1)
o(1)
例如:給出的鍊錶為1→2→3→4→5→null,返回1→4→3→2→5→null
方法一:迭代法
將n
位置之前的元素逐步插入到n
元素之後
/**
* struct listnode ;
*/class
solution
for(
int i =
0; i < n -
1; i++
) end = end-
>next;
while
(start != end)
return vhead-
>next;}}
;
方法二:遞迴法
遞迴反轉整個鍊錶的**非常簡潔,直接看**
listnode*
reverselist
(listnode* head)
理解這段**的關鍵是,不要跳進遞迴,而是立足當下,看現在的狀態和遞迴的結果
再來看乙個問題,反轉鍊錶的前n
個結點
listnode* successor =
nullptr
;listnode*
reversen
(listnode* head,
int n)
listnode* last =
reversen
(head-
>next, n -1)
; head-
>next-
>next = head;
head-
>next = successor;
return last;
}
那麼在回到本題,用遞迴方法解決就很簡單了
listnode*
reversebetween
(listnode* head,
int m,
int n)
演算法 鍊錶反轉和鍊錶內指定區間反轉
鍊錶反轉 輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。例如 輸入,返回。public listnode reverse listnode head return temp 鍊錶內指定區間反轉 將乙個鍊錶 m 位置到 n 位置之間的區間反轉,要求時間複雜度o n 空間複雜度o 1 例如 給出的鍊錶為 ...
反轉鍊錶指定位置
反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。首先找到要反轉的位置,從n位置開始。要反轉乙個結點cur 反轉2 4位置結點 到這裡還沒有結束 還需要將1的next改為4結點 2的next改為5結點 所以最開始之前,必須借用front引用儲存m位置的前驅prev。找到m位置後,使用引用rea...
Java 指定範圍的鍊錶反轉
鍊錶反轉的大致思路 反轉鍊錶只需要不斷地將當前節點的下乙個節點的 next 指向當前節點,然後將下個節點設定為當前節點,設定兩個引用,cur,next 分別指向當前和下乙個節點 如圖所示 cur 1,next 2 反轉操作為 next.next cur 然後移動cur,next 一次反轉後 當前為2...