训练营打卡day3

链表和数组区别

数组是连续的,链表是杂乱排列的,通过链表内部结构去指向下一个节点。

题目:203. 移除链表元素 - 力扣(LeetCode)

报错:runtime error: member access within null pointer of type ‘ListNode’ (solution.cpp)

报错原因:试图操作空指针,因为没有判断当前的链表为空就对其内的成员进行了操作

由于链表基础了解的也不深刻,这道题上来还是比较蒙圈的,不知道如何下手,写了一半就去看视频和代码随想录了。看完之后自己把两种方法都写了一边,这里边需要注意的点就是要考虑临界条件,cur 还是 cur->next != NULL。个人感觉还是容易钻如想把所有情况都考虑明白的牛角尖,其实很多时候边界条件考虑好了之后其他的都是ok的。

题目:206. 反转链表 - 力扣(LeetCode)

这道题自己是按自己的思路写了代码出来,AC通过了。

然后看了一下代码随想录的视频,双指针和递归算法很简便很巧妙。不过还是要搞清楚边界条件和递归时谁是cur 谁是pre。

 题目:707. 设计链表 - 力扣(LeetCode)

这道题还是很难得,首先定义类自己就很吃力,然后考虑各种链表情况也很麻烦。看完视频之后自己把代码敲一遍,先有个印象,以后有机会再慢慢深入掌握。class:C++类(Class)的定义与实现_c++ class-CSDN博客

class MyLinkedList {
public:
    struct ListNode{
        int val;
        ListNode* next;
        ListNode() : val(0), next(nullptr) {} 
        ListNode(int x) : val(x), next(nullptr) {} 
        ListNode(int x, ListNode *next) : val(x), next(next) {} 
    };
    MyLinkedList() {
        dummynode = new ListNode();
        _size = 0;
    }
    
    int get(int index) {
        if(index < 0 || index > _size - 1) {
            return -1;
        }
        ListNode* cur = dummynode->next;
        while(index) {
            cur = cur->next;
            index--;
        }
        return cur->val;
    }
    
    void addAtHead(int val) {
        ListNode* cur = dummynode;
        ListNode* newnode = new ListNode(val);
        newnode->next = cur->next;
        cur->next = newnode;
        _size++;
    }
    
    void addAtTail(int val) {
        ListNode* newnode = new ListNode(val);
        ListNode* cur = dummynode;
        while(cur->next != nullptr) {
            cur = cur->next;
        }
        cur->next = newnode;
        _size++;
    }
    
    void addAtIndex(int index, int val) {
        if(index > _size) return;
        if(index < 0) index = 0;
        ListNode* newnode = new ListNode(val);
        ListNode* cur = dummynode;
        while(index--) {
            cur = cur->next;
        }
        newnode->next = cur->next;
        cur->next = newnode;
        _size++;
    }
    
    void deleteAtIndex(int index) {
        if(index < 0 || index >= _size) return;
        ListNode* cur = dummynode;
        while(index--) {
            cur = cur->next;
        }
        cur->next = cur->next->next;
        _size--;
    }
private:
    int _size;
    ListNode* dummynode;
};

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤来创建一个基本的 Vue 3 上班打卡组件: 1. 首先,确保你已经安装了 Vue 3。你可以使用以下命令进行安装: ``` npm install vue@next ``` 2. 创建一个名为 "ClockIn" 的新组件。在你的 Vue 3 项目中的某个位置,创建一个新的文件 "ClockIn.vue",并添加以下代码: ```vue <template> <div> <button @click="clockIn">上班打卡</button> <div v-if="isClockedIn"> 已打卡时间:{{ clockedInTime }} </div> </div> </template> <script> export default { data() { return { isClockedIn: false, clockedInTime: null } }, methods: { clockIn() { // 获取当前时间 const currentTime = new Date().toLocaleString(); // 更新数据 this.isClockedIn = true; this.clockedInTime = currentTime; } } } </script> <style> /* 可以添加一些样式来美化组件 */ </style> ``` 这个组件包含了一个 "上班打卡" 的按钮以及一个显示已打卡时间的区域。当用户点击按钮时,按钮的点击事件 `clockIn` 会被触发,将会获取当前时间并更新数据。 3. 在你的应用中使用该组件。在你需要使用上班打卡组件的地方,引入并使用它。例如,在你的主应用组件中,可以添加以下代码: ```vue <template> <div> <h1>欢迎使用上班打卡系统</h1> <ClockIn /> </div> </template> <script> import ClockIn from './ClockIn.vue'; export default { components: { ClockIn } } </script> ``` 这样,你就可以在你的应用中使用这个上班打卡组件了。 请注意,这只是一个简单的示例,你可以根据你的需求进行定制和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值