赞
踩
- 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*node=dummyhead->next;
- while(index){
- node=node->next;
- index--;
- }
- return node->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;
- }
- node->next=cur->next;
- cur->next=node;
- size++;
- }
-
- void addAtIndex(int index, int val) {
- if(index > size) return;
- if(index < 0) index = 0;
- LinkedNode* newNode = new LinkedNode(val);
- LinkedNode* 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;
- }
- LinkedNode* newNode = dummyhead;
- LinkedNode* cur = dummyhead;
- while(index){
- cur=cur->next;
- index--;
- }
- LinkedNode* tmp = cur->next;
- cur->next = cur->next->next;
- delete 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);
- */
当创建一个
MyLinkedList
对象时,它会初始化一个虚拟头节点dummyhead
,并将链表的大小size
初始化为 0。链表的每个节点都包含一个整数值val
和一个指向下一个节点的指针next
。1. 添加节点:
addAtHead(int val)
方法会在链表头部插入一个新节点。它创建一个新的节点,将新节点的next
指向当前头节点,然后更新dummyhead
的next
指针为新节点,并增加链表的大小size
。
addAtTail(int val)
方法会在链表尾部插入一个新节点。它遍历链表直到最后一个节点,然后将新节点插入到最后一个节点的后面,并增加链表的大小size
。
addAtIndex(int index, int val)
方法会在指定索引处插入一个新节点。它遍历链表直到达到指定索引的前一个节点,然后将新节点插入到前一个节点的后面,并增加链表的大小size
。2. 获取节点:
get(int index)
方法会获取指定索引处节点的值。它遍历链表直到达到指定索引的节点,并返回该节点的值。3. 删除节点:
deleteAtIndex(int index)
方法会删除指定索引处的节点。它遍历链表直到达到指定索引的前一个节点,然后将前一个节点的next
指针指向要删除节点的下一个节点,并释放被删除节点的内存,最后减少链表的大小size
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。