Study Plan For Algorithms - Part13
1. K个一组翻转链表
给定链表的头节点 head ,每 k 个节点一组进行翻转,请返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,请将最后剩余的节点保持原有顺序。
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
def reverse_list(head, k):
prev = None
curr = head
for _ in range(k):
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
dummy = ListNode(0)
dummy.next = head
prev_group_tail = dummy
while head:
tail = head
for i in range(k - 1):
if tail.next:
tail = tail.next
else:
prev_group_tail.next = head
return dummy.next
next_group_head = tail.next
tail.next = None
new_head = reverse_list(head, k)
prev_group_tail.next = new_head
prev_group_tail = head
head = next_group_head
return dummy.next
2. 删除有序数组中的重复项
给定一个 非严格递增排列 的数组 nums ,请 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if not nums:
return 0
i = 0
for j in range(1, len(nums)):
if nums[j]!= nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
本文来自博客园,作者:WindMay,转载请注明原文链接:https://www.cnblogs.com/stephenxiong001/p/18381788