Leetcode 25.K个一组翻转链表
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 25.K个一组翻转链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
難度:困難
頻率:185
**題目:**給你一個鏈表,每K個節點一組進行翻轉,清你返回翻轉后的鏈表。
K是一個正整數,它的值小于或等于鏈表的長度。
如果節點總數不是K的整數倍,那么請將最后勝于的節點保持原有順序。
進階:
- 你可以設計一個只使用常數額外空間的算法來解決此問題嗎?
- 你不能知識單純的改變節點內部的值,而是需要實際進行節點交換。
題目類型:鏈表翻轉
解題方法:當成多個鏈表翻轉
解題思路:
(思考:)1.如果K剛好等于鏈表長度,即剛好完成一此鏈表翻轉。
2.如果K大于鏈表長度,即不翻轉。
3.如果K小于鏈表長度,即完成 abs(鏈表長度/K)次翻轉。
3.1 那多次翻轉,需要考慮什么問題?假設存在兩次翻轉, 那第一次翻轉跟第二次翻轉 最后的結果要怎么連接在一起? —>故需要用一個指針記錄第二次翻轉的head節點。
3.2那么我怎么知道判斷剩下的是否大于K,是否要翻轉?—>如果每翻轉一個節點記錄一次的話,最后如果小于K,不需要翻轉,也翻轉了。所以需要先計數,再翻轉。可以用指針記錄。 —>結合3.1里記錄下次的head。可以先用一個指針移動K次,如果指針不為空,即可以進行翻轉。
一次翻轉需要兩個移動指針和一個head指針,判斷是否大于K需要1個指針。
PS:
1.主函數里需要3個指針,pre(記錄上一段的尾) start(記錄下一段的head) end(判斷K)。
2.翻轉函數里 需要3個指針,一個Pre 一個Cur 一個head。
總結
以上是生活随笔為你收集整理的Leetcode 25.K个一组翻转链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 215.数组中的第K个
- 下一篇: Leetcode 912.排序算法(快排