-
做题
203.移除链表元素,第一次做的时候首先是考虑加个头节点,其次是更多的得考虑移除元素的时候,还要释放节点.(保持一个好习惯)class Solution { public: ListNode* removeElements(ListNode* head, int val) { ListNode* node=new ListNode(0); node->next=head; ListNode* p=node; while(p->next!=nullptr) { ListNode *w=p->next; if(p->next->val==val) { p->next=p->next->next; delete w; }else{ p=p->next; } } p=node; node=node->next; delete p; return node; } };
707设计链表
第一次自己写不知道为啥在vscode上根本提交不了,一直报input参数不合题目的错误,如果一直过不了又debug不了,我就直接去看解答了。
看了解答的格式,又做了一遍,中途主要是忘了标记链表长度的数据在delete的时候忘了减了,所以用cout调试出来了。class MyLinkedList { public: struct ListNode{ int val; ListNode* next; ListNode(int v):val(v),next(nullptr){}; }; MyLinkedList() { len=-1; head=new ListNode(0); // printList(); } int get(int index) { if(index<0||index>len) { return -1; } int s=0; ListNode* p=head; while(p->next!=nullptr) { if(s==index) { return p->next->val; } s++; p=p->next; } return -1; // printList(); } void addAtHead(int val) { ListNode* node=new ListNode(val); ListNode* p=head; node->next=p->next; p->next=node; len++; // printList(); } void addAtTail(int val) { ListNode* node=new ListNode(val); ListNode* p=head; while(p->next!=nullptr) { p=p->next; } p->next=node; node->next=nullptr; len++; // printList(); } void addAtIndex(int index, int val) { if(index<0||index>len+1) { return ; } ListNode* node=new ListNode(val); ListNode* p=head; int s=0; while(p->next!=nullptr) { if(s==index) { break; } s++; p=p->next; } node->next=p->next; p->next=node; len++; // printList(); } void deleteAtIndex(int index) { // cout<<"len:"<<len<<endl; if(index<0||index>len) { return ; } ListNode* p=head; int s=0; while(p->next!=nullptr) { if(s==index) { break; } s++; p=p->next; } ListNode* h=p->next; p->next=p->next->next; delete h; len--; // printList(); } void printList(){ ListNode* p=head; while(p->next!=nullptr) { cout<<p->next->val<<" "; p=p->next; } cout<<endl; } private: int len; ListNode* head; };
206反转链表
这题没什么问题,还是养成delete头节点的习惯class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* h=new ListNode(0); ListNode* p=head; ListNode* q=h; while(p!=nullptr) { ListNode* w=p->next; p->next=h->next; h->next=p; p=w; } p=q; q=q->next; delete p; return q; } };
链表与设计
最新推荐文章于 2024-11-02 20:41:42 发布