链表
移除链表元素

ListNode* removeElements(ListNode* head, int val) {
ListNode *dummyHead=new ListNode(0);
dummyHead->next=head;
ListNode*cur=dummyHead;
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=dummyHead->next;
delete dummyHead;
return head;
}
设计链表

class MyLinkedList {
public:
struct LinkedNode{
int val;
LinkedNode *next;
LinkedNode(int val):val(val),next(nullptr){}
};
MyLinkedList() {
dummyHead=new LinkedNode(0);
size=0;
}
int get(int index) {
if(index>(size-1) || index<0){
return -1;
}
LinkedNode *cur=dummyHead->next;
while(index--){
cur=cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkedNode *newNode=new LinkedNode(val);
newNode->next=dummyHead->next;
dummyHead->next=newNode;
size++;
}
void addAtTail(int val) {
LinkedNode *newNode=new LinkedNode(val);
LinkedNode *cur=dummyHead;
while(cur->next!=nullptr){
cur=cur->next;
}
cur->next=newNode;
size++;
}
void addAtIndex(int index, int val) {
if(index>size)return;
if(index<0)index=0;
LinkedNode *newNode=new LinkedNode(val);
LinkedNode *cur=dummyHead;
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=dummyHead;
while(index--){
cur=cur->next;
}
LinkedNode *temp=cur->next;
cur->next=cur->next->next;
delete temp;
temp=nullptr;
size--;
}
private:
int size;
LinkedNode *dummyHead;
};
翻转链表

ListNode* reverseList(ListNode* head) {
ListNode *temp;
ListNode *cur=head;
ListNode *pre=nullptr;
while(cur){
temp=cur->next;
cur->next=pre;
pre=cur;
cur=temp;
}
return pre;
}