如題, 將鍊錶中的元素 k 個為一組,組內進行反轉,不夠 k 個的不反轉。
例如:
題目本身很容易理解
資料結構:
private
static
class
listnode
}
首先,需要乙個子函式,用於鍊錶逆序。這個算是寫爛了的題目了,但是一般都是用非遞迴來解決的,三個指標,一步一步逆序。但遞迴做更簡潔,不過需要對遞迴很熟悉:
private
static listnode reverserecursive
(listnode head)
然後就是 k 個一組逆序的函式 reversekgroup
public listnode reversekgroup
(listnode head,
int k)
// 用於不夠 k 個元素的組,直接返回
if(temp == null)
return head;
listnode newhead = temp.next;
temp.next = null;
// 把這一組的最後乙個元素和後面的元素斷開連線
listnode res =
reverserecursive
(head)
;// 經過小組逆序,此時的 head 其實是本組最後乙個元素了
head.next =
reversekgroup
(newhead,k)
;return res;
}
自測**:
public
static
void
main
(string[
] args)
}
單鏈表是最基本的資料結構,但同樣可以考察遞迴思想。
遞迴的單鏈表經常要把最後乙個節點置空,不然遞迴可能會產生環
K個一組反轉鍊錶
描述 給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 ...
演算法 K 個一組翻轉鍊錶
給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1...
k個一組翻轉鍊錶
題目描述 給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5當 k 2 時,應當返回 2 1 4 3 5當 k 3 時,應當返回 3 2 1...