代码随想录第三天

### 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;
    }
};
```

补了一下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值