/* 和安迪一样挖地道吧,尽头是希望和自由啊 */ class Solution { public: ListNode* removeElements(ListNode* head, int val) { ListNode *L=new ListNode(-1); L->next=head; ListNode *slow=L,*fast=head,*r=L; while(fast!=nullptr) { if(fast->val==val) { slow->next=fast->next; fast=slow->next; } else{ fast=fast->next; slow=slow->next; } } return L->next; } };
class MyLinkedList { public: public: // 定义链表节点结构体 struct ListNode { int val; ListNode* next; ListNode(int val):val(val), next(nullptr){} }; //创建链表头节点 ListNode *L=new ListNode(-1);//创建头节点 MyLinkedList() { } int get(int index) { ListNode *p=L; while(p!=nullptr && index>=0) { p=p->next; index--; } if(p==nullptr) { return -1; } return p->val; } void addAtHead(int val) { ListNode *temp=new ListNode(val); temp->next=L->next; L->next=temp; } void addAtTail(int val) {//每一次尾插都要遍历整个链表一次找到尾巴,如果可以也可以设置全局的尾指//针 ListNode *r=L; while(r->next!=nullptr) { r=r->next; } ListNode *temp=new ListNode(val); r->next=temp; } void addAtIndex(int index, int val) {//第一个节点的index是0 ListNode *temp=new ListNode(val); if(index<=0) { temp->next=L->next; L->next=temp; } else { //有两种可能,小于链表长度,大于链表长度 index--; ListNode *p=L; while(p!=nullptr && index>=0) { p=p->next; index--; } if(p!=nullptr) { temp->next=p->next; p->next=temp; } } } void deleteAtIndex(int index) { ListNode *p=L; while(index>0) { p=p->next; index--; } if(p!=nullptr && p->next!=nullptr) { p->next=p->next->next; } } }; /** * 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); */
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *slow=nullptr,*fast=head; while(fast!=nullptr) { ListNode *temp=fast; fast=fast->next; temp->next=slow; slow=temp; } return slow; } };
文章提供了两个类,Solution和MyLinkedList,分别实现了链表节点的移除以及链表的反转功能。Solution类中,removeElements方法用于从链表中删除指定值的节点,而reverseList方法用于反转链表。MyLinkedList类则包含了一系列方法,如添加元素到头部、尾部或指定位置,以及删除指定索引处的元素。



1070





