鍊錶演算法 k個一組反轉鍊錶

2021-10-02 10:54:11 字數 1046 閱讀 5968

如題, 將鍊錶中的元素 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...