如何用Python实现K个一组翻转链表的力扣问题?

2026-06-11 08:531阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计637个文字,预计阅读时间需要3分钟。

如何用Python实现K个一组翻转链表的力扣问题?

题目描述:中文:给你一个链表,每+k+个节点进行一组转换,请你返回转换后的链表。+k+是一个正整数,它的值小于或等于链表的长度。如果节点的总数不是+k+的整数倍,那么最后的节点保持不变。

例如:输入:链表为 1->2->3->4->5->6->7->8->9->10,k=3输出:链表转换为 3->6->9->2->5->8->1->4->7->10

题目描述:

中文:

给你一个链表,每 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.
You may not alter the values in the list‘s nodes, only nodes itself may be changed.

如何用Python实现K个一组翻转链表的力扣问题?

# 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

题目来源:力扣

本文共计637个文字,预计阅读时间需要3分钟。

如何用Python实现K个一组翻转链表的力扣问题?

题目描述:中文:给你一个链表,每+k+个节点进行一组转换,请你返回转换后的链表。+k+是一个正整数,它的值小于或等于链表的长度。如果节点的总数不是+k+的整数倍,那么最后的节点保持不变。

例如:输入:链表为 1->2->3->4->5->6->7->8->9->10,k=3输出:链表转换为 3->6->9->2->5->8->1->4->7->10

题目描述:

中文:

给你一个链表,每 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.
You may not alter the values in the list‘s nodes, only nodes itself may be changed.

如何用Python实现K个一组翻转链表的力扣问题?

# 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

题目来源:力扣