1. K個一組翻轉連結串列
題目連結:https://leetcode.cn/problems/reverse-nodes-in-k-group/
給定連結串列的頭節點 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. 刪除有序陣列中的重複項
題目連結:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
給定一個 非嚴格遞增排列 的陣列 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