NC21 鍊錶內指定區間反轉

2021-10-10 23:20:14 字數 1228 閱讀 3285

將乙個鍊錶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...