移除链表元素
题目链接203. 移除链表元素 - 力扣(LeetCode)
class Solution { public: ListNode* removeElements(ListNode* head, int val) { ListNode* varHead = new ListNode(0); varHead->next = head; ListNode* cur = varHead; while(cur->next != NULL){ if(cur->next->val == val){ ListNode* temp = cur->next; cur->next = cur->next->next; delete temp; } else{ cur = cur->next; } } head = varHead->next; delete varHead; return head; } };
学生时代c语言课第一次卡壳就是卡在了链表上面,现在这个阶段,重新写链表相关的题目已经比那个时候好了很多。不过虚拟头结点法确实是没用过。学会了之后收获很高。
设计链表
class MyLinkedList { public: struct LinkedNode { int val; LinkedNode* next; LinkedNode(int val):val(val), next(nullptr){} }; MyLinkedList() { _varHead = new LinkedNode(0); _size = 0; } int get(int index) { if(index < 0 || index >_size-1){ return -1; } LinkedNode* cur = _varHead->next; while(index--){ cur = cur->next; } return cur->val; } void addAtHead(int val) { LinkedNode* newHead = new LinkedNode(val); newHead->next = _varHead->next; _varHead->next = newHead; _size++; } void addAtTail(int val) { LinkedNode* newTail = new LinkedNode(val); LinkedNode* cur = _varHead; while(cur->next != NULL){ cur = cur->next; } cur->next = newTail; _size++; } void addAtIndex(int index, int val) { if(index > _size || index < 0){ return; } // if(index < 0){ // index = 0; // } // LinkedNode* cur = _varHead; // while(index--){ // cur = cur->next; // } // LinkedNode* newAdd = new LinkedNode(val); // newAdd->next = cur->next; // cur->next = newAdd; // _size++; LinkedNode* newNode = new LinkedNode(val); LinkedNode* cur = _varHead; while(index--) { cur = cur->next; } newNode->next = cur->next; cur->next = newNode; _size++; } void deleteAtIndex(int index) { if(index >= _size || index < 0){ return; } LinkedNode* cur = _varHead; while(index--){ cur = cur->next; } LinkedNode* temp = cur->next; if(cur->next != NULL){ cur->next = cur->next->next; } delete temp; _size--; } private: int _size; LinkedNode* _varHead; };
这道题,感觉挺简单的。上手写起来怎么写怎么不对,本地调试了一会儿,怎么都找不到原因。中间加了无数个条件判断。
然后发现是最初的两个地方搞错了。在删除的时候,索引大于等于长度,就不执行。因为索引下标是从0开始,index等于长度的时候也是越界了的。
get也是同理。
搞错了这两个地方的判断,导致我后面错得稀里糊涂的
标签:index,varHead,cur,val,Day4,next,LinkedNode,LeetCode,刷题 From: https://www.cnblogs.com/tianmaster/p/16853053.html