话说这两天机器学习初学是有点懵的,这两天用自己的笔记本跑模型,想先跑个120轮搞出个模型先,结果跑了6个小时跑了34轮,最后还报错了hh。还是先刷刷B站上的学习视频好好学吧。
扯远了,关于这道题目,其实基础知识都是特别简单的,都是408学过闭着眼睛都能写的代码,但确实还是不太熟悉C++。各种东西都不太熟悉,看到定义结构体和private又恍然大悟,想起了自己学的C#hh(学的很认真,不过好久没碰)。最后照着自己的逻辑看着别人的代码重构了一遍。
PS:中间的解析是别人的,也提示自己一下。不过也是408操作系统的知识点,不枉我当时学408学的非常辛苦,还是能用上的!
以下是707的题解:
class MyLinkedList {
public:
struct LinkedNode{
int val;
LinkedNode* next;
LinkedNode(int val): val(val) ,next(nullptr){}
};
MyLinkedList() {
_dummyHead = new LinkedNode(0);
_size = 0;
}
int get(int index) {
if (index>(_size - 1) || index <0){
return -1;
}
LinkedNode* cur = _dummyHead->next;
while(index--){
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkedNode* node = new LinkedNode(val);
node->next = _dummyHead->next;
_dummyHead->next = node;
_size++;
}
void addAtTail(int val) {
LinkedNode* node = new LinkedNode(val);
LinkedNode* cur = _dummyHead;
while(cur->next != nullptr){
cur = cur->next;
}
cur->next = node;
_size++;
}
void addAtIndex(int index, int val) {
LinkedNode* node = new LinkedNode(val);
LinkedNode* cur = _dummyHead;
int cnt=0;
if(index>_size){
return ;
}else if(index<0){
index = 0;
}
while(index--){
cur = cur->next;
}
node->next = cur->next;
cur->next = node;
_size++;
}
void deleteAtIndex(int index) {
if (index >= _size || index < 0) {
return;
}
LinkedNode* cur = _dummyHead;
while(index--) {
cur = cur ->next;
}
LinkedNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
//delete命令指示释放了tmp指针原本所指的那部分内存,
//被delete后的指针tmp的值(地址)并非就是NULL,而是随机值。也就是被delete后,
//如果不再加上一句tmp=nullptr,tmp会成为乱指的野指针
//如果之后的程序不小心使用了tmp,会指向难以预想的内存空间
tmp=nullptr;
_size--;
}
private:
int _size;
LinkedNode* _dummyHead;
};
/**
* 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);
*/