### 203
```C++
/**
* 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) {
while(head!=nullptr&&head->val==val){
head=head->next;
}
if(head==nullptr||head->next==nullptr){
if(head!=nullptr&&head->val==val){
return head;
}
return head;
}
ListNode* q=head;
ListNode* p=head->next;
while(p!=nullptr){
if(p->val==val){
q->next=p->next;
p=p->next;
}else{
q=p;
p=p->next;
}
}
return head;
}
};
```
### 206
```C++
//双指针
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* q=head;
ListNode* p=nullptr;
ListNode* temp=nullptr;
while(q!=nullptr){
temp=q->next;
q->next=p;
p=q;
q=temp;
}
return p;
}
};
//递归
/**
* 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* reverse(ListNode* cur,ListNode* pre){
if(cur==nullptr){
return pre;
}
ListNode* temp=cur->next;
cur->next=pre;
return reverse(temp,cur);
}
ListNode* reverseList(ListNode* head) {
return reverse(head,nullptr);
}
};
```
### 707
```C++
struct ListedNode{
int val;
ListedNode* next;
ListedNode(int val):val(0),next(nullptr) {};
};
class MyLinkedList {
public:
MyLinkedList():head(new ListedNode(0)),size(0) {
}
int get(int index) {
if (index > (size - 1) || index < 0) {
return -1;
}
ListedNode* cur = head->next;
while(index--){ // 如果--index 就会陷入死循环
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
ListedNode* q=new ListedNode(val);
q->next=head;
head=q;
size++;
}
void addAtTail(int val) {
ListedNode* p=head;
ListedNode* q=new ListedNode(val);
int index=size-1;
while(index-->=0){
p=p->next;
}
p->next=q;
size++;
}
void addAtIndex(int index, int val) {
ListedNode* p=head;
ListedNode* q=new ListedNode(val);
if(index>size||index<0){
return;
}
while(index-->=0){
p=p->next;
}
q->next=p->next;
p->next=q;
size++;
}
void deleteAtIndex(int index) {
ListedNode* p=head;
ListedNode* q=nullptr;
if(index>=size||index<0){
return;
}
while(index-->=0){
q=p;
p=p->next;
}
q->next=p->next;
size--;
}
private:
ListedNode* head;
int size;
};
/**
* 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);
*/
```
1. 206的递归写法还是不会
2. 707这个写法有问题,明天再检查一下怎么写
### 707
```C++
/*
* @lc app=leetcode.cn id=707 lang=cpp
*
* [707] 设计链表
*/
// @lc code=start
struct ListNode{
int val;
ListNode* next;
ListNode():val(0),next(nullptr){}
ListNode(int val):val(val),next(nullptr){}
};
class MyLinkedList {
public:
MyLinkedList() {
_head=new ListNode();
size=0;
}
int get(int index) {
if(index>=size||index<0){
return -1;
}
ListNode* temp=this->_head->next;
while(index--){
temp=temp->next;
}
return temp->val;
}
void addAtHead(int val) {
ListNode* q=new ListNode(val);
ListNode* temp1=_head->next;
q->next=temp1;
_head->next=q;
size++;
}
void addAtTail(int val) {
ListNode* temp=this->_head;
ListNode* q=new ListNode(val);
int num=this->size;
while(num--){
temp=temp->next;
}
temp->next=q;
size++;
}
void addAtIndex(int index, int val) {
ListNode* q=new ListNode(val);
ListNode* temp=this->_head;
if(index>this->size||index<0){
return;
}
while(index--){
temp=temp->next;
}
q->next=temp->next;
temp->next=q;
size++;
}
void deleteAtIndex(int index) {
ListNode* temp=this->_head;
if(index>=size||index<0){
return;
}
while(index--){
temp=temp->next;
}
temp->next=temp->next->next;
size--;
}
ListNode* _head;
int size;
};
/**
* 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);
*/
// @lc code=end
```
### 206
```C++
class Solution {
public:
// ListNode* reverse(ListNode* cur,ListNode* pre){
// if(cur==nullptr){
// return pre;
// }
// ListNode* temp=nullptr;
// temp=cur->next;
// cur->next=pre;
// return reverse(temp,cur);
// }
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr)
{
return head;
}
ListNode* last=reverseList(head->next);
head->next->next=head;
head->next=nullptr;
return last;
}
};
```
补了一下