题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
#coding:utf-8
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @param k int整型
# @return ListNode类
#
class Solution:
def reverse_list(self, head):
prev = None
cur = head
while cur != None:
next = cur.next
cur.next = prev
prev = cur
cur = next
return prev
def reverseKGroup(self , head , k ):
# write code here
cur = head
nums = 0
# 计算链表的个数
while cur != None:
cur = cur.next
nums += 1
# 如果链表的个数小于k,则无需反转
if nums < k:
return head
# 如果链表的个数等于k,则全部反转
elif nums == k:
return self.reverse_list(head)
# 链表个数大于k,找到前k个的临界点,cur和next,前k个反转,后面的交给递归的reverseKGroup方法
else:
cur = head
for i in range(k - 1):
cur = cur.next
next = cur.next
cur.next = None
start = self.reverse_list(head)
head.next = self.reverseKGroup(next, k)
return start
#数据结构和算法#
