力扣——Reverse Nodes in k-Group(K 个一组翻转链表) python
题目描述: 中文: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明 : 你的算法只能使用常数的额外空间。 ? 英文: 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. 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 Note: Only constant extra memory is allowed. ? # 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 """ pre = ListNode(-1) tail = pre q = head while q is not None: #向后查找k个节点 n = k p = q while p is not None and n > 0: p = p.next n -= 1 #如果在查找k个节点的过程中遇到None,则说明 #后面的节点不够k个节点则直接跳出即可 if n > 0: tail.next = q break #将这K个节点以头插法插入 end = q while q != p: t = q.next q.next = tail.next tail.next = q q = t tail = end return pre.next ? ? 题目来源:力扣 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |