6.22 - hard - 4

25. Reverse Nodes in k-Group

花了很大的精力才做出来,不过也算是亲手做出来了,在这里再分析一下
基本的想法就是一段一段来,所以创建了一个函数reverseK, 但是reverseK的时候要返回多个值,一个是翻转后这一段的head和tail,还要返回下一段的head。比较tricky的地方就是,这中间还需要用一个prev把一段一段连起来。最好不要放在reverseK这个函数里连,感觉会造成比较大的麻烦,这样做比较清爽一点。

# 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
        """
        if k == 1:
            return head
        dummyhead = ListNode(0)
        dummyhead.next = head
        
        l = self.length(head)
        m = 0
        next_head = head
        prev = dummyhead
        while m + k <= l:
            cur_head, next_head, cur_tail = self.reverseK(next_head, k)
            prev.next = cur_head
            prev = cur_tail
            m += k
        prev.next = next_head
        return dummyhead.next
    
    def reverseK(self, head, m):
        tail = head
        prev = None
        while m > 0 and head:
            next = head.next
            head.next = prev
            prev = head
            head = next
            m -= 1
        return prev, head, tail # prev is reversed linkedlist head, head is the next first element for next part
            
    
    def length(self, head):
        count = 0
        while head:
            count += 1
            head = head.next
        return count
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容