您的位置:首页 > 游戏 > 游戏 > K个一组翻转链表(LeetCode)

K个一组翻转链表(LeetCode)

2024/11/15 9:54:57 来源:https://blog.csdn.net/weixin_74254879/article/details/140939061  浏览:    关键词:K个一组翻转链表(LeetCode)

题目

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

解题

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverseKGroup(head, k):"""翻转链表中每 k 个节点一组的节点。:param head: 链表的头节点:param k: 每组翻转的节点数量:return: 翻转后的链表头节点"""def getKthNode(current, k):"""获取链表中第 k 个节点。:param current: 当前节点:param k: 节点数量:return: 第 k 个节点或 None(如果不足 k 个节点)"""while current and k > 1:current = current.nextk -= 1return currentdef reverseLinkedList(head, k):"""翻转链表的一部分。:param head: 部分链表的头节点:param k: 节点数量:return: 翻转后的链表头节点"""previous, current = None, headwhile k:next_node = current.nextcurrent.next = previousprevious = currentcurrent = next_nodek -= 1return previous# 找到第 k 个节点kth_node = getKthNode(head, k)if not kth_node:return headnext_group_head = kth_node.nextkth_node.next = None# 翻转当前 k 个节点new_head = reverseLinkedList(head, k)# 递归处理剩余链表,并连接head.next = reverseKGroup(next_group_head, k)return new_headdef listToListNode(arr):"""将 Python 列表转换为链表。:param arr: Python 列表:return: 链表的头节点"""dummy = ListNode()current = dummyfor val in arr:current.next = ListNode(val)current = current.nextreturn dummy.nextdef listNodeToList(head):"""将链表转换为 Python 列表。:param head: 链表的头节点:return: Python 列表"""result = []while head:result.append(head.val)head = head.nextreturn resultdef testReverseKGroup():"""测试 reverseKGroup 函数。"""test_cases = [([1, 2, 3, 4, 5], 2),([1, 2, 3, 4, 5], 3),([1, 2, 3, 4, 5], 1),([1], 1),([1, 2], 2)]for i, (input_list, k) in enumerate(test_cases):head = listToListNode(input_list)new_head = reverseKGroup(head, k)output_list = listNodeToList(new_head)print(output_list)# 运行测试代码
testReverseKGroup()

 [2, 1, 4, 3, 5]
[3, 2, 1, 4, 5]
[1, 2, 3, 4, 5]
[1]
[2, 1]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com