leetcode707:设计链表(增删差)

leetcode707:设计链表(增删差),第1张

leetcode707:设计链表(增删差) 一:题目


二:上码
class MylinkedList {
public:

    //定义链表节点结构体
    struct linkedNode {
        int val;
        linkedNode* next;
        linkedNode(int val):val(val), next(nullptr){}
    };

    // 初始化链表
    MylinkedList() {
        node = new linkedNode(0); // 这里定义的头结点 是一个虚拟头结点,而不是真正的链表头结点
        _size = 0;
    }

  
    //根据示例我们可以得出下标为0的是第一个数值
    int get(int index) {
        if(index > _size - 1 || index < 0){//链表数值范围[0,_size-1]
            return -1;
        }   
        linkedNode *temp = node->next;
        while(index--){//这个index--,可以让我们知道指针往后移动的次数,直到为0找到为止
            temp = temp->next;
        }
        return temp->val;
    }
    
    //插入一个新结点 为头节点
    void addAtHead(int val) {
        linkedNode*newNode = new linkedNode(val);
        newNode->next = node->next;
        node->next = newNode;
        _size++;
    }    
    //在尾部插入一个结点
    void addAtTail(int val) {
        linkedNode *newNode = new linkedNode(val);
        
        linkedNode* temp = node;
        while(temp->next != NULL){
            temp = temp->next;
        }
        temp->next = newNode;
        _size++;
    }
    
    //第一种情况:比如(1,2) 则在第二个元素的位置插入2
    //如果index等于链表长度则在结尾插入一个值
    //如果大于链表的长度则返回空
    
    void addAtIndex(int index, int val) {
        if(index > _size){
            return;
        }

        linkedNode* newNode = new linkedNode(val);
        linkedNode* temp = node;//第一个结点是虚拟结点
        
        //比如 原来的链表为1->3  然后插入(1,2) 因为有虚拟结点的存在所以
        //链表实际为(0->1->3)  所以当index为0的时候 temp 指向是链表中的1
        while(index--){
            temp = temp->next;
        }

        newNode->next = temp->next;
        temp->next = newNode;
        _size++;
    }
    
    void deleteAtIndex(int index) {
        if(index < 0 || index > _size-1)//大于链表的长度
            return ;

        linkedNode* temp = node;
        while(index--){
            temp = temp->next;
        }
        //当结束while循环的时候  这时候的temp指向的是要删除结点的前一个结点
        
        linkedNode *cmp = temp->next;//cmp指向了要删除的结点
        temp->next = temp->next->next;
        delete cmp;
        _size--;


    }

    private:
    int _size;
    linkedNode * node;
};



渣渣杰又水了一道 ,这个是关于链表的增删查,得理解每个函数中的边界条件 其次多敲两遍 会熟练一些
晚安 陌生的你 最近开始睡前听播客了 感觉有一个人 一直在我耳边叨叨 排解孤独 还有助入睡 我在知乎上看一篇文章的时候 那篇文章 提到了 张爱玲的《倾城之恋》最近就靠他入睡了 晚安晚安 陌生人!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存