Problem: 25. K 个一组翻转链表
思路 & 解题方法
链表反转。
复杂度
时间复杂度:
O ( n ) O(n) O(n)
空间复杂度:
O ( 1 ) O(1) O(1)
Code
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
p0 = ans = ListNode(0, head)
n = 0
cur = head
while cur:
n += 1
cur = cur.next
cur = head
pre = None
while n >= k:
n -= k
for _ in range(k):
# pre->cur->nxt
# pre<-cur nxt
#
nxt = cur.next
cur.next = pre
pre = cur
cur =nxt
# pre cur
# pre是一组中的最后一个
nxt = p0.next # 第一个
nxt.next = cur# 原来的第一个变成最后一个,应该连接到下一组的第一个,也就是cur
p0.next = pre # 原来那组的前一个应该指向原来那组的最后一个,也就是pre
p0 = nxt # p0.next也应该再次变成下一组的前一个位置
return ans.next