每日一題 Leetcode之K個一組翻轉鍊錶

2021-10-07 17:11:59 字數 593 閱讀 3493

給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。

k 是乙個正整數,它的值小於或等於鍊錶的長度。

如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。

示例:給你這個鍊錶:1->2->3->4->5

當 k = 2 時,應當返回: 2->1->4->3->5

當 k = 3 時,應當返回: 3->2->1->4->5

說明:你的演算法只能使用常數的額外空間。

你不能只是單純的改變節點內部的值,而是需要實際進行節點交換。

思路:k個一組反轉鍊錶,每翻轉一組就存在翻轉鍊錶和未翻轉鍊錶鏈結,需要記錄要翻轉的鍊錶的前指標和後繼指標,然後通過這兩個指標將反轉後的鍊錶相連線。還要通過start和end兩個指標確定乙個要翻轉鍊錶的範圍

public listnode reversekgroup(listnode head, int k) 

return res.next;

}public listnode reverse(listnode head)

return pre;

}

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

leetcode每日一題 合併k個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 這個思路是我最先想到的思路,通過對鍊錶兩兩進行合併,得到排序好的鍊錶。時間複雜度是o n logk o nlogk o nlog k 也比較簡單,...

每日一題 LeetCode之括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 思路 使用深度優先遍歷實現,每乙個位置要麼是 要麼是 我們用兩個變數left和right儲存 和 的剩餘個數。每次遞迴,left或right減1,字串新增乙個相應的括號,當lef...