第2章 线性表综合习题(leetcode)

本文详细介绍了几道关于线性表的leetcode习题,包括删除有序数组重复元素、反转链表的一部分、旋转链表、判断链表是否对称和判断链表是否成环。这些习题涉及到单链表的基本操作和算法设计,要求在限制的空间复杂度内高效解决。
摘要由CSDN通过智能技术生成

这里选择一些关于线性表的leetcode的习题。这些习题主要以顺序表和链表为主,需要熟练掌握顺序表和单链表的基本操作,同时综合使用之前学习过的一些算法设计方法和技巧。
习题的顺序与难度无关。

删除有序数组重复元素(Remove Duplicates from Sorted Array)

给定一个已经排序的数组,删除里面的重复元素,保证每个元素只出现一次,并返回新的数组长度。要求使用 O(1) 的空间复杂度。例如[1,1,2]应该得到[1,2],长度为2

解这个问题,应该很容易联系到2.2节的例题——删除所有指定值的元素。有两种思路,一个是维护新元素需要迁移的位数,一个是维护新元素的新的下标,即相当于重建线性表。这里选择第二种思路,更容易实现操作。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.empty()){
            return 0;
        }
        int i;
        int newid = 1;
        for(i = 1; i < nums.size(); ++i){
            if(nums[newid - 1] != nums[i]){
                nums[newid++] = nums[i];
            }
        }
        return newid;
    }
};

反转链表的一部分(Reverse Linked List II)

给定一个链表和两个数 m n ,反转第 m n

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值