將給出的鍊錶中的節點每 k 個一組翻轉,返回翻轉後的鍊錶
如果鍊錶中的節點數不是 k 的倍數,將最後剩下的節點保持原樣
你不能更改節點中的值,只能更改節點本身。
要求空間複雜度 o(1)
例如:給定的鍊錶是1→2→3→4→5
對於 k=2, 你應該返回 2→1→4→3→5
對於 k=3, 你應該返回 3→2→1→4→5
輸入描述:輸入乙個鍊錶和指定的k值
輸出描述:翻轉後的鍊錶
輸入1→2→3→4→5,2
輸出通過計算長度可以知道需要交換幾輪,每一輪採用頭插法的思路依次交換節點。2→1→4→3→5
通過計算長度以及採用頭插法的方式實現翻轉
// 思路1
public
class
solution
//構造乙個新的頭節點,方便返回值時找到反轉後鍊錶的頭節點。
listnode dummy =
newlistnode(0
);dummy.next = head;
listnode pre = dummy, cur = head, tmp = null;
int len =0;
while
(head != null)
// 這裡也是採用頭插法的方式
for(
int i =
0; i < len / k; i++
) pre = cur;
cur = cur.next;
}return dummy.next;
}}
小夥伴如果想測試的話,可以直接到牛客網這個鏈結做測試
鍊錶中的節點每k個一組翻轉-牛客網
牛客網刷題 鍊錶中環的入口節點
對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 拓展 你能給出不利用額外空間的解法麼?輸入描述 輸入乙個鍊錶 輸出描述 輸出環的入口節點 輸入 輸出 hash表 使用額外的空間 通過遍歷記錄到hash表的方式找到環形鍊錶的入口 時間負責度 o n 空間負責度 o n 快慢指標 不使用...
牛客網刷題 重排鍊錶
將給定的單鏈表 l l0 l1 l ln 重新排序為 l0 ln l1 l l2 l l 要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。輸入 輸出 線性表 因為鍊錶沒有下表,我們可以現將鍊錶遍歷一遍,儲存到線性表中,然後再重排序 鍊錶中點 鍊錶逆序 合併鍊錶 先查詢鍊錶的中點,...
牛客網 鍊錶中倒數第k個節點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。第一種方法 思路 1 新建乙個指標,用於遍歷鍊錶中所有的節點,統計節點的個數count。2 新建乙個指標,用於統計當前指標指示節點中的第幾個元素sum。3 判斷當前指標指示的節點是不是倒數第k個 count sum 1。4 注意不要忘記判斷鍊錶為空的情...