k组倒置链表节点

来源:互联网 发布:女生半袖图片淘宝 编辑:程序博客网 时间:2024/05/21 19:25

k组倒置链表节点

Reverse Nodes in k-Group

  • 给定一个链表,每k个倒置其节点,返回新链表的头部,不允许使用额外的内存,只能在原有链表节点基础上进行操作。

题目原文:

  • Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
  • k is a positive integer and is less than or equal to the length of the linked 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.

example 1

Given this linked list: 1->2->3->4->5For k = 2, you should return: 2->1->4->3->5For k = 3, you should return: 3->2->1->4->5

思路

  1. 参照我的博文成对交换链表节点,讨巧的办法是只交换节点内的value,不做节点的移动。
  2. 如不使用上述方法,可以使用递归完成

代码

# Definition for singly-linked list.class ListNode(object):    def __init__(self, x):        self.val = x        self.next = Noneclass Solution(object):    def reverseKGroup(self, head, k):        """        :type head: ListNode        :type k: int        :rtype: ListNode        """        try:            arr = []            tmp = head            self.k = k            for i in range(k):                arr.append(tmp)                tmp = tmp.next            while True:                for i in range(k//2):                    arr[i].val, arr[-1-i].val = arr[-1-i].val, arr[i].val                arr = list(map(self.move, arr))        finally:            return head    def move(self, x):        ret = x        for i in range(self.k):            ret = ret.next        return ret

本题以及其它leetcode题目代码github地址: github地址