1.移除链表元素
/**
* 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* removeElements(ListNode* head, int val) {
ListNode* first=new ListNode(0);
first->next=head;
ListNode* cur=first;
while(cur->next!=NULL){
if(cur->next->val==val){
ListNode* tmp=cur->next;
cur->next=cur->next->next;
delete tmp;
}else{
cur=cur->next;
}
}
head=first->next;
delete first;
return head;
}
};
2.设计链表
class MyLinkedList {
public:
struct LinkNode{
int val;
LinkNode* next;
LinkNode(int val):val(val),next(nullptr){}
};
MyLinkedList() {
first=new LinkNode(0);
size0=0;
}
int get(int index) {
if(index>(size0-1)||index<0){
return -1;
}
LinkNode* cur=first->next;
while(index--){
cur=cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkNode* newnode=new LinkNode(val);
newnode->next=first->next;
first->next=newnode;
size0++;
}
void addAtTail(int val) {
LinkNode* newnode=new LinkNode(val);
LinkNode* cur=first;
while(cur->next!=NULL){
cur=cur->next;
}
cur->next=newnode;
size0++;
}
void addAtIndex(int index, int val) {
if(index>size0) return;
if(index<0)index=0;
LinkNode* newnode=new LinkNode(val);
LinkNode* cur=first;
while(index--){
cur=cur->next;
}
newnode->next=cur->next;
cur->next=newnode;
size0++;
}
void deleteAtIndex(int index) {
if(index>size0||index<0){
return;
}
LinkNode* cur=first;
while(index--){
cur=cur->next;
}
LinkNode* tmp=cur->next;
cur->next=cur->next->next;
delete tmp;
size0--;
}
private:
int size0;
LinkNode* first;
};
3.反转链表
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre=NULL;
ListNode* cur=head;
while(cur!=NULL){
ListNode* tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
return pre;
}
};