25. Reverse Nodes in k-Group leetcode Python 2016 new season

来源:互联网 发布:jquery.easing.js教程 编辑:程序博客网 时间:2024/06/08 10:13

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

You may not alter the values in the nodes, only nodes itself may be changed.

Only constant memory is allowed.

For example,
Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

need a helper function to reverse k nodes and then put the reversed list together. this should be O(n) time.

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def reverseNodes(self, startNode, endNode):        dummyNode = ListNode(None)        dummyNode.next = startNode        while dummyNode.next != endNode:            tmpNode = startNode.next            startNode.next = tmpNode.next            tmpNode.next = dummyNode.next            dummyNode.next = tmpNode        return endNode, startNode    def reverseKGroup(self, head, k):        """        :type head: ListNode        :type k: int        :rtype: ListNode        """        if not head:            return head        dummyNode = ListNode(None)        dummyNode.next = head        startNode = head        while startNode.next:            endNode = startNode            for count in range(k - 1):                endNode = endNode.next                if not endNode.next:                    return dummyNode            newstart, newend = self.reverseNodes(startNode, endNode)            startNode.next = newstart            startNode = newend        return dummyNode.next                

 

0 0