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
posted @ 2024-08-27 06:28  WindMay  阅读(4)  评论(0编辑  收藏  举报