ListNode* removeElements(ListNode* head, int val) {
if(head == nullptr) return nullptr;
ListNode* dummy = new ListNode(0,head);//增加头结点
ListNode* pre = dummy;
while(head){
if(head->val == val){
pre->next = head->next;
delete head;
head = pre->next;
}
else{
pre = head;
head = head->next;
}
}
return dummy->next;
}
struct LinkList{
int val;
LinkList* next;
LinkList(int val):val(val),next(nullptr){}
};
LinkList* dummyHead;
int size;
MyLinkedList() {
dummyHead = new LinkList(0); //头结点
size = 0;
}
int get(int index) {
if(index < 0 || index >= size || size == 0)
return -1;
LinkList* cur = dummyHead->next;
while(index--){ // 如果--index 就会陷入死循环
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkList* node = new LinkList(val);
node->next = dummyHead->next;
dummyHead->next = node;
size++;
}
void addAtTail(int val) {
LinkList* node = dummyHead;
while(node->next){
node = node->next;
}
LinkList* newNode = new LinkList(val);
node->next = newNode;
size++;
}
void addAtIndex(int index, int val) {
if( index < 0 ) index = 0;
if(index > size) return;
LinkList* cur = dummyHead;
LinkList* newNode = new LinkList(val);
while(index--) {
cur = cur->next;
}
newNode->next = cur->next;
cur->next = newNode;
size++;
}
void deleteAtIndex(int index) {
if(index<0 || index>=size) return;
int num = 0;
LinkList* pre = dummyHead;
LinkList* node = dummyHead->next;
while(node){
if(num == index){
pre->next = node->next;
size--;
delete node;
node = nullptr;
return;
}
pre = node;
node = node->next;
num++;
}
}