美文网首页
【链表】--k个一组反转(hard)

【链表】--k个一组反转(hard)

作者: warManHy | 来源:发表于2020-12-30 17:42 被阅读0次
    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
    
    k 是一个正整数,它的值小于或等于链表的长度。
    
    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
    
    示例:
    
    给你这个链表:1->2->3->4->5
    
    当 k = 2 时,应当返回: 2->1->4->3->5
    
    当 k = 3 时,应当返回: 3->2->1->4->5
    
    
    说明:
    你的算法只能使用常数的额外空间。
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    

    思路:考察链表反转

    链表反转

    def reverseList(head):
        pre = None
        next = None
        while(head != None):
            next = head.next
            head.next = pre
            pre = head 
            head = next
        return pre
    

    你的算法只能使用常数的额外空间。
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
    方法:

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution(object):
        def reverse(self, head, node):
            pre = None
            while head != node:
                tmp = head.next
                head.next = pre
                pre = head
                head = tmp
            return pre
        def reverseKGroup(self, head, k):
            """
            :type head: ListNode
            :type k: int
            :rtype: ListNode
            """
            if head == None:
                return None
            node = head
            for i in range(k):
                if node == None:
                    return head
                node = node.next
            new_head = self.reverse(head, node)
            head.next = self.reverseKGroup(node, k)
            return new_head
    

    相关文章

      网友评论

          本文标题:【链表】--k个一组反转(hard)

          本文链接:https://www.haomeiwen.com/subject/kzinnktx.html