zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 37-2

    Reverse Nodes in k-Group

    思路:这题最主要是犁清对每组操作的时更新链表指针的顺序。对每个group要记录pre,cur,tail。一种错误的记忆是仿照reverse把cur.next=pre。实际中只有group内reverse,对group外(i.e., pre和tail.next), 想象成做rotation: pre要链接原来的tail,而原来的head去链接tail.next。
    k-Group内循环移动几步?这里思维的要点是counter表示的是移动的步数而不是结点数。当前group head移动k步,就会移到下一组的head

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def reverseKGroup(self, head, k):
            """
            :type head: ListNode
            :type k: int
            :rtype: ListNode
            """
            def reverseOne(head, tail):
                cur = head
                pre = None
                while cur!=tail:
                    next=cur.next
                    cur.next=pre
                    pre=cur
                    cur=next
                    
                return pre
            
            dummy = ListNode(0)
            dummy.next = head
            cur = head
            tail = head
            pre = dummy
            while tail:
                n=k
                while tail and n>0: 
                    tail=tail.next
                    n-=1
                
                if n!=0:
                    break
                
                ch = reverseOne(cur, tail)
                pre.next = ch
                cur.next = tail
                pre = cur
                cur = tail
                
            return dummy.next
                    
                
    
  • 相关阅读:
    进程空间与系统空间(一)
    内核之最
    Linux 内核3.10.5 专场
    device_create与device_register
    重写与重载的含义
    抽象类和接口的区别
    Spring知识点
    mybatis学习
    知识点
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/absolute/p/5678247.html
Copyright © 2011-2022 走看看