题解 | #牛群的重新分组#

牛群的重新分组

https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93

  • 题目考察的知识点 : 链表的反转
  • 题目解答方法的文字分析:
  1. 定义一个dummy节点指向头部便于操作
  2. 通过尾指针tail检查剩余长度是否>=k
  3. 反转以head开头长度为k的子链表
  4. 将反转后的子链表接回原链表
  5. 将pre指针后移,继续处理下一个子链表
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        def reverse(head, tail):
            pre = tail.next
            cur = head
            while pre != tail:
                nex = cur.next
                cur.next = pre
                pre = cur
                cur = nex
            return tail, head
            
        dummy = ListNode(0)
        dummy.next = head
        pre = dummy

        while head:
            tail = pre
            # 检查剩余部分长度是否大于等于 k 
            for i in range(k):
                tail = tail.next
                if not tail:
                    return dummy.next

            nex = tail.next
            head, tail = reverse(head, tail)
            # 把子链表重新接回原链表
            pre.next = head 
            tail.next = nex
            pre = tail
            head = tail.next
    
        return dummy.next
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务