Leetcode链表——707.设计链表

题目

707 设计链表

思路

  • 为方便所有的节点操作相同,不用单独区分头结点,设置虚拟头结点dummyHead 

  • 首先设置结构体结点,包括:1. 数值 2. 指针

  • 题中第几个节点就是第几个索引,index=几

  • 初始化链表结构时,需要初始化头结点,整个链表长度的size计数

  • public可调用识别变量,设置private变量

  • 最好在每个函数中,都表明cur指针的位置,不同函数需要指针指向位置不同

  • cur->dummyhead,则cur移动到指定位置会指向index,cur->dummyhead->next,移动指定位置指向index->next

  • C++11标准中,nullptr是一个所谓“指针空值类型”的常量

  • 如果函数返回值是void,可在函数中将例外情况返回return;表示无法执行函数并跳出的情况

    void test()
    {
    
           if()
            {
                return;
            }
    
    
    
    }

代码

class MyLinkedList {
public:
    //建立节点
    struct LinkNode
    {
        int val;
        LinkNode* next;
        //构造函数
        LinkNode(int x):val(x),next(nullptr)
        {

        }

    };

    MyLinkedList() {
        //指针初始化
        dummyHead = new LinkNode(0);
        size = 0;
        LinkNode* cur;
    }
    
    int get(int index) {
        if (index > (size - 1) || index < 0) {
            return -1;
        }
        cur = dummyHead->next;
        while(index--){ // 如果--index 就会陷入死循环
            cur = cur->next;
        }

        return cur->val;
    }
    
    void addAtHead(int val) {
        //初始化节点
        LinkNode* newNode = new LinkNode(val);
        newNode->next = dummyHead->next;
        dummyHead->next = newNode;
        size++;
    }
    
    void addAtTail(int val) {
        LinkNode* newNode = new LinkNode(val);
        cur = dummyHead;
        while(cur->next != nullptr)
        {
            cur = cur->next;
        }
        cur->next = newNode;
        size++;

    }
    
    void addAtIndex(int index, int val) {
        if (index > size)
        {
            return;
        }
        LinkNode* newNode = new LinkNode(val);
        cur = dummyHead;
        while(index)
        {
            cur = cur->next;
            index--;
        }
        newNode->next = cur->next;
        cur->next = newNode;

        size++;

    }
    
    void deleteAtIndex(int index) {
        if(index >= size || index < 0)
        {
            return;
        }
        cur = dummyHead;

        while(index--)
        {
            cur = cur->next;
        }
        LinkNode* delNode = cur->next;
        cur->next = cur->next->next;
        delete delNode;
        size--;


    }

private:
    LinkNode* dummyHead;
    int size;
    LinkNode* cur;
    
};

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList* obj = new MyLinkedList();
 * int param_1 = obj->get(index);
 * obj->addAtHead(val);
 * obj->addAtTail(val);
 * obj->addAtIndex(index,val);
 * obj->deleteAtIndex(index);
 */

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值