题目
分析
p.next指向翻转子链表的头
q指向翻转链表的尾的next
把p和q之间的链表翻转得到新的链表L
把p.next指向L的头
L.next指向q
p指向L的尾,然后q向后走k-1步,再次翻转p,q之间的链表
python代码
class Solution(object):
def reverseKGroup(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
pHead = ListNode()
pHead.next = head
p = pHead
q = head
while p and q:
for i in range(k):
q = q.next
if i<k-1 and not q:
break
if i<k-1:
break
t,new_p = self.reserve(p,q)
new_p.next = q
p.next = t
p = new_p
return pHead.next
def reserve(self,p,q):
t = ListNode()
x = p.next
new_p = p.next
while x!=q:
tmp = x
x = x.next
nxt = t.next
t.next = tmp
t.next.next = nxt
return t.next,new_p