行业知识
力扣707
2026-11-11 02:20:43
来源:互联网转载
力���题目链接(opens new window)
题意:
在链表类中实现这些功能:
- get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
- deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
使用虚拟头节点统一操作,
遍历链表的指针的起始处根据不同的操作有不同的设置,
class MyLinkedList {public: struct LinkNode{ int val; LinkNode * next; LinkNode(int val):val(val),next(nullptr){} }; MyLinkedList() { dumHead = new LinkNode(0); size = 0; } int get(int index) { if(index (size - 1)){ return -1; } LinkNode * p = dumHead->next;//遍历链表得指针指向虚拟头节点的下一个结点 while(index--){ p=p->next; } return p->val; } void addAtHead(int val) { LinkNode * s= new LinkNode(val); s->next = dumHead->next;//遍历链表得指针指向虚拟头节点的下一个结点 dumHead->next = s; size++;//这里链表长度要加1 } void addAtTail(int val) { LinkNode * s = new LinkNode(val); LinkNode*p=dumHead;//遍历链表得指针指向虚拟头节点 while(p->next!=nullptr){ p=p->next; } p->next = s; size++;//链表长度加一 } void addAtIndex(int index, int val) { if(index>size)return; if(indexnext;//p指向index结点的前一个结点 } s->next = p->next; p->next = s; size++; } void deleteAtIndex(int index) { if (index >= size || index next;//cur的next指向的要删除的结点,即第n个 } LinkNode* 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; LinkNode* dumHead;};/** * 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); */
最新文章
- 使用mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql
- vscode中git拉取、提交代码、解决冲突,以及合并代码的操作
- 网站制作资料怎么填写?
- 梦幻流转服务器怎么进不去?
- 【Linux】从零开始认识进程 — 中上篇
- 揭秘高效刷信誉秘籍,源码PHP解析助你轻松提升信誉评级!
- switch怎么登录巴西服务器?
- 宝塔面板怎么建站?
- 【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
- 95% emitting CompressionPlugin ERROR Error: error:0308010C:digital envelope routines::unsupported