给定链表,一次反转链表k个节点并返回其修改后的列表。
k是正整数,并且小于或等于链表的长度。 如果节点数不是k的倍数,那么最后的剩余节点应该保持不变。
做法:用一个类似k窗口大小,一组一组处理
用l和r来标识每一组的范围(k大小): 每一更新l要更新到r的位置上去,r再不断next k个节点
用pre 和cur来进行改变节点指向:每次更新pre移动到cur,cur移到下一个位置
用jump来跳跃k个节点以连接每组的尾部和下一组的起点:每次更新,jump要跳到l的位置
用dummy来表示整个list首部
一次while true是进行k各节点的翻转
用pre cur进行挨个节点的翻转
def reverseKGroup(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
dummy, dummy.next = ListNode(0), head
pre = dummy
while True:
l = r = pre.next
i = 1
while i<k:
if r is None:
return dummy.next
r = r.next
i+=1
a = l
b = l.next
while a != r:
b.next, a, b = a, b, b.next
pre.next, l.next = r, r.next
pre = l