ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
if (head==NULL) {
return head;
}
ListNode* curNode=dummyHead;
while(curNode->next!=NULL){//外包裹循环
if(curNode->next->val==val){
curNode->next=curNode->next->next;
}else{
curNode = curNode->next;
}
}
return dummyHead->next;
}
//单指针+不带头结点 //定义结点 struct Node { //结点有两个属性,val和next指针 int val; Node* next; Node(int _val): val(_val), next(nullptr) {};//构造体 }; class MyLinkedList { private: int size; //链表长度 Node* head; //链表头结点 public: MyLinkedList() { size = 0; head = nullptr; } int get(int index) { if(index >= size) return -1; //下标无效 Node* cur = head; for(int i = 0; i < index; i++){ cur = cur->next; } return cur->val; } void addAtHead(int val) { addAtIndex(0,val); } void addAtTail(int val) { addAtIndex(size,val); } void addAtIndex(int index, int val) { if(index > size || index < 0) return; //下标无效 size++; Node* cur=head; for (int i = 0; i < index-1; ++i) { cur = cur->next; } Node* add=new Node(val); if(index == 0){ add->next=cur; head=add; }else{ add->next =cur->next; cur->next = add; } } void deleteAtIndex(int index) { if(index < 0 || index >= size){ size--; Node* cur = head; for (int i = 0; i < index-1; ++i) { cur = cur->next; } if(index ==0){ head =head->next; }else{ Node* p=cur->next; cur->next =p->next; delete(p); } } } };
ListNode* reverseList(ListNode* head) {
//迭代
ListNode* prev = NULL;
ListNode* curr = head;
while (curr != NULL) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}