这题有两种解法,
方法1:对于任意的k-group,利用O(k)的额外空间存储val,然后从两头开始遍历交换元素->逆转,最后返回一个结点。
方法2因为节点对插入操作的复杂度是O(1),我们每遇到一个节点,就将它插入到当前的首节点之后,这样时间复杂度都是O(n),空间复杂度是O(1)。
class Solution(object):
def reverseKGroup(self, head, k):
def count(h):
cnt = 0
while h:h=h.next;cnt+=1
return cnt
# def reverse(pre,k):
# s = []
# h=pre
# pre=pre.next
# j = 0
# for i in range(k):
# j+=1
# s.append(pre.val)
# pre=pre.next
# pre = h.next
# last = None
# for i in range(j-1,-1,-1):
# pre.val = s[i]
# last = pre
# pre = pre.next
# return last
def reverse(pre,k):
head = pre.next
cur = head.next
for i in range(k-1):
head.next = cur.next
cur.next = pre.next
pre.next = cur
cur = head.next
return head
pre = ListNode(0)
Head = pre
start,n = 0,count(head)
pre.next = head
while start+k<=n:
pre = reverse(pre,k)
start+=k
return Head.next