25. K 个一组翻转链表
生活随笔
收集整理的這篇文章主要介紹了
25. K 个一组翻转链表
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
25. K 個(gè)一組翻轉(zhuǎn)鏈表
給你一個(gè)鏈表,每 k 個(gè)節(jié)點(diǎn)一組進(jìn)行翻轉(zhuǎn),請(qǐng)你返回翻轉(zhuǎn)后的鏈表。
k 是一個(gè)正整數(shù),它的值小于或等于鏈表的長度。
如果節(jié)點(diǎn)總數(shù)不是 k 的整數(shù)倍,那么請(qǐng)將最后剩余的節(jié)點(diǎn)保持原有順序。
進(jìn)階:
你可以設(shè)計(jì)一個(gè)只使用常數(shù)額外空間的算法來解決此問題嗎?
你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值,而是需要實(shí)際進(jìn)行節(jié)點(diǎn)交換。
示例 1:
輸入:head = [1,2,3,4,5], k = 2
輸出:[2,1,4,3,5]
code
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/ func reverseKGroup(head *ListNode, k int) *ListNode {// 判斷長度是否夠 K,不夠就直接返回了current := headfor i := 0; i < k; i++ {if current == nil {return head}current = current.Next}pre := reverseList(head, current)// 遞歸,反轉(zhuǎn)剩余的列表,原來的頭結(jié)點(diǎn)反轉(zhuǎn)后就變成了現(xiàn)在的尾節(jié)點(diǎn),再把反轉(zhuǎn)之后的剩余列表拼起來head.Next = reverseKGroup(current, k)// 返回新的頭結(jié)點(diǎn)return pre }func reverseList(head *ListNode, current *ListNode) *ListNode {if head == current || head.Next == current {return head}temp := headnode := reverseList(head.Next, current)temp.Next.Next = temptemp.Next = currentreturn node }總結(jié)
以上是生活随笔為你收集整理的25. K 个一组翻转链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 隐形毒蝎剧情介绍
- 下一篇: micro/protoc-gen-mic