K 个一组翻转链表Python解法
生活随笔
收集整理的這篇文章主要介紹了
K 个一组翻转链表Python解法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給你一個(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:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
?
例:
輸入:head = [1,2,3,4,5], k = 3 輸出:[3,2,1,4,5]解析:每k個(gè)節(jié)點(diǎn)一個(gè)輪回,然后在輪回里進(jìn)行“掉頭”,用開頭指向下一個(gè)輪回開頭,然后后面的節(jié)點(diǎn)一一接上。最后不足k個(gè)節(jié)點(diǎn)不進(jìn)輪回。
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution(object):def reverseKGroup(self, head, k):""":type head: ListNode:type k: int:rtype: ListNode"""cur = headcount = 0while cur and count != k: # 將cur標(biāo)記在下一個(gè)輪回的頭節(jié)點(diǎn)cur = cur.nextcount += 1if count == k: # 輪回cur = self.reverseKGroup(cur, k) # 將指針指向后續(xù)排序好的鏈表while count:tmp = head.next # 先將二號(hào)為標(biāo)記head.next = cur # 將輪回1的頭節(jié)點(diǎn)的next節(jié)點(diǎn)指向下一個(gè)輪回的頭節(jié)點(diǎn)cur = head # cur指針作為被指向的節(jié)點(diǎn)head = tmp # 頭指針指向剛剛標(biāo)記好的二號(hào)節(jié)點(diǎn)count -= 1 # 每完成一次排序,就將計(jì)數(shù)減少1head = cur # 最后的cur指針指向當(dāng)前輪回更新后的第一個(gè)節(jié)點(diǎn)return head # 返回當(dāng)前輪回總結(jié)
以上是生活随笔為你收集整理的K 个一组翻转链表Python解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两两交换链表中的节点Python解法
- 下一篇: 没吃烤鸭?库克坐百万奔驰S65L到北京东