国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

代碼隨想錄-鏈表1( 203.移除鏈表元素、)

這篇具有很好參考價值的文章主要介紹了代碼隨想錄-鏈表1( 203.移除鏈表元素、)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

203. 移除鏈表元素

/**
 * 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;
        }
        ListNode* node = head;
        
        while (node != nullptr && node->next != nullptr)
        {
            if (node->next->val == val)
            {
                node->next = node->next->next;
            }
            else 
            {
                node = node->next;
            }
        }
        return head;
    }
};

707. 設(shè)計鏈表

class MyLinkedList {
public:
    struct linknode 
    {
        int val;
        linknode* next;
        linknode(int x): val(x), next(NULL){}
    };


    MyLinkedList() 
    {
        this->head = new linknode(0);
        this->size = 0;
    }
    
    int get(int index) 
    {
        linknode* cur = this->head;
        if (this->size == 0) return -1;
        else if (index > this->size-1) return -1;
        else 
        {
            for (int i=0; i<index; i++)
            {
                cur = cur->next;
            }
        }
        return cur->val;
    }
    
    void addAtHead(int val) 
    {
        if (this->size == 0)
        {
            this->head->val = val;
            this->size = 1;
        }
        else
        {
            linknode* cur = new linknode(val);
            linknode* tmp = this->head;
            this->head = cur;
            cur->next = tmp;
            this->size += 1; 
        }
    }
    
    void addAtTail(int val) 
    {
        if (this->size == 0)
        {
            this->head->val = val;
            this->size = 1;
        }
        else
        {
            linknode* cur = new linknode(val);
            linknode* tmp = this->head;
            while (tmp->next != NULL)
            {
                tmp = tmp->next;
            }
            tmp->next = cur;
            this->size++;
        }



    }
    
    void addAtIndex(int index, int val) 
    {
        if (index > this->size) return;
        else if (index == this->size) addAtTail(val);
        else if (index == 0) addAtHead(val);
        else
        {
            linknode* cur = this->head;
            linknode* newnode = new linknode(val);
            for (int i=0; i<index-1; i++)
            {
                cur = cur->next;
            }
            linknode* tmp = cur->next;
            cur->next = newnode;
            newnode->next = tmp;
            this->size++;
        }


    }
    
    void deleteAtIndex(int index) 
    {
        if (this->size == 0) return;
        else if (index > this->size-1) return;
        else{
            if (index == 0) this->head = this->head->next;
            else if (index == this->size-1) 
            {
                linknode* cur = this->head;
                while (cur != NULL && cur->next != NULL && cur->next->next != NULL)
                {
                    cur = cur->next;
                }
                cur->next = NULL;
            }
            else
            {
                linknode* cur = this->head;
                for (int i=0; i<index-1; i++)
                {
                    cur = cur->next;
                }
                cur->next = cur->next->next;
            }
            this->size--;
        }

    }

private:
    linknode *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);
 */

206. 反轉(zhuǎn)鏈表

??????? 自己寫的是從后往前去反轉(zhuǎn),沒想到可以從前往后反轉(zhuǎn)的方法,以為地址不連續(xù)并且無法根據(jù)索引找地址就沒辦法做,看了雙指針方法后才發(fā)現(xiàn)如何從前往后反轉(zhuǎn),其實只要記錄每個結(jié)點的地址就可以了,還是對鏈表的概念把握的不好,需要多刷題。

自己做的:

class Solution {
public:
    ListNode* reverseList(ListNode* head) 
    {
        if (head==nullptr) return head;
        if (head->next==nullptr) return head;
        ListNode* newnode = head;
        ListNode* tmp1 = head;
        // while (newnode != nullptr && newnode->next != nullptr && newnode->next->next != nullptr)
        // {
        //     newnode = newnode->next;
        // }
        // ListNode*
        int flag = 0;

        while (head->next != nullptr)
        {
            ListNode* cur = head;
            while (cur != nullptr && cur->next != nullptr && cur->next->next != nullptr)
            {
                cur = cur->next;
            }
            if (flag == 0)
            {
                newnode = cur->next;
                tmp1 = cur->next;
                cur->next = nullptr;
            }
            else
            {
                ListNode* tmp = cur->next;
                cur->next = nullptr;
                tmp1->next = tmp;
                tmp1 = tmp;
            }
            flag++;
        }
        tmp1->next = head;
        return newnode;

    }
};

雙指針:文章來源地址http://www.zghlxwxcb.cn/news/detail-826335.html

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp; // 保存cur的下一個節(jié)點
        ListNode* cur = head;
        ListNode* pre = NULL;
        while(cur) {
            temp = cur->next;  // 保存一下 cur的下一個節(jié)點,因為接下來要改變cur->next
            cur->next = pre; // 翻轉(zhuǎn)操作
            // 更新pre 和 cur指針
            pre = cur;
            cur = temp;
        }
        return pre;
    }
};

到了這里,關(guān)于代碼隨想錄-鏈表1( 203.移除鏈表元素、)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 代碼隨想錄day3 | 203.移除鏈表元素 707.設(shè)計鏈表 206.反轉(zhuǎn)鏈表

    代碼隨想錄day3 | 203.移除鏈表元素 707.設(shè)計鏈表 206.反轉(zhuǎn)鏈表

    直接讓前一個節(jié)點指向后一個節(jié)點即可 兩種方法 第一種:直接刪除 第二種:頭刪的時候,直接 head=head-next 其實這兩種方法都沒有做到統(tǒng)一 第三種:虛擬頭結(jié)點法 這樣的話,咱們刪除的時候,就是以統(tǒng)一的規(guī)則來進行刪除啦! 203.移除鏈表元素 法一:原始刪除法 1、while(h

    2024年02月16日
    瀏覽(23)
  • 代碼隨想錄Day3|鏈表理論基礎(chǔ)|203.移除鏈表元素|707.設(shè)計鏈表|206.反轉(zhuǎn)鏈表

    雖然以前寫過一次鏈表,但是真的已經(jīng)忘得一干二凈了 鏈表 :通過 指針 串聯(lián)在一起的線性結(jié)構(gòu),每個 節(jié)點 都由數(shù)據(jù)域和指針域組成。 指針域 :存放下一個節(jié)點的指針,最后一個節(jié)點的指針域指向null,也即空指針 head :鏈表的入口節(jié)點,也即鏈表的頭節(jié)點 鏈表的類型 單

    2024年02月11日
    瀏覽(21)
  • 代碼隨想錄第三天|鏈表理論基礎(chǔ),LeetCode203.移除鏈表元素, LeetCode707.設(shè)計鏈表,LeetCode 206.反轉(zhuǎn)鏈表

    代碼隨想錄第三天|鏈表理論基礎(chǔ),LeetCode203.移除鏈表元素, LeetCode707.設(shè)計鏈表,LeetCode 206.反轉(zhuǎn)鏈表

    鏈表: 鏈表是一種通過指針串聯(lián)在一起的線性結(jié)構(gòu),每一個節(jié)點由兩部分組成,一個是數(shù)據(jù)域一個是指針域(存放指向下一個節(jié)點的指針),最后一個節(jié)點的指針域指向null(空指針的意思)。 鏈表的入口節(jié)點稱為鏈表的頭結(jié)點也就是head。 鏈表類型: 1.單鏈表 單鏈表中的指

    2024年02月11日
    瀏覽(27)
  • 代碼隨想錄day3|鏈表理論基礎(chǔ)、移除鏈表元素、設(shè)計鏈表、翻轉(zhuǎn)鏈表

    代碼隨想錄day3|鏈表理論基礎(chǔ)、移除鏈表元素、設(shè)計鏈表、翻轉(zhuǎn)鏈表

    1、基本類型:單鏈表、雙鏈表、循環(huán)鏈表 2、存儲方式:和數(shù)組不一樣,鏈表是隨機存儲在內(nèi)存中,不是連續(xù)分配在內(nèi)存中。 3、鏈表的定義: 定義了一個數(shù)據(jù)域,還有一個指針域,并且定義了一個構(gòu)造函數(shù)。 4、鏈表的操作: 刪除節(jié)點: ?在圖中,若需要刪除D這個節(jié)點,只

    2024年02月05日
    瀏覽(29)
  • 代碼隨想錄Day3 | 鏈表01-leetcode203、707、206

    題目鏈接:移除鏈表元素 思路: 鏈表中元素的添加和刪除關(guān)鍵是要 保證不斷鏈且指向關(guān)系正確 。對于刪除操作,鏈的修改涉及將待刪除元素的前一個元素指向待刪除元素的后一個元素,因此在判斷當前元素是否需要刪除時,要記錄當前元素的前后指針。 1.刪除頭結(jié)點時另作

    2024年02月16日
    瀏覽(92)
  • 【代碼隨想錄-Leetcode第二題:27.移除元素】

    給你一個數(shù)組 nums 和一個值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。 元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的 樣例:示例 1: 解釋:函數(shù)

    2024年02月14日
    瀏覽(20)
  • 代碼隨想錄Python:704. 二分查找,27. 移除元素

    數(shù)組是非?;A(chǔ)的數(shù)據(jù)結(jié)構(gòu)。 數(shù)組是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 題目: 給定一個? n ?個元素有序的(升序)整型數(shù)組? nums ?和一個目標值? target ??,寫一個函數(shù)搜索? nums ?中的? target ,如果目標值存在返回下標,否則返回? -1 。 題目鏈接:. - 力扣

    2024年02月13日
    瀏覽(23)
  • 【代碼隨想錄算法第一天| 704.二分查找 27.移除元素】

    題目鏈接:二分查找 文章講解:代碼隨想錄.二分查找 視頻講解:手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_嗶哩嗶哩_bilibili 二分前提:有序數(shù)組,數(shù)組中無重復(fù)元素 方法:結(jié)合數(shù)組的特征,可以為左閉右閉區(qū)間[0, 數(shù)組長度-1],或者左

    2024年02月16日
    瀏覽(21)
  • 代碼隨想錄day1 | 704.二分查找 27.移除元素

    代碼隨想錄day1 | 704.二分查找 27.移除元素

    1、循環(huán)變量 2、判斷條件 當時左閉右閉時,while循環(huán)里面的條件,我們可以先假設(shè),有等號即有l(wèi)eft=right的情況,例如[1,1]這個區(qū)間,那么循環(huán)是要進入里面的,所以要取得等號。 判斷的時候,nums[mid]tar,那么必然tar不在右半?yún)^(qū)間,所以right=mid-1 nums[mid]tar,那么必然tar不在左半

    2024年02月15日
    瀏覽(26)
  • 代碼隨想錄第一天 | LeetCode704.二分查找,LeetCode 27.移除元素

    數(shù)組理論基礎(chǔ)要點: 數(shù)組也是數(shù)據(jù)結(jié)構(gòu)的一種, 是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 數(shù)組注意點: 數(shù)組下標都是從0開始的。 數(shù)組內(nèi)存空間的地址是連續(xù)的。 因為上述兩點, 數(shù)組的在內(nèi)存空間的地址是連續(xù)的,所以我們在刪除或者增添元素的時候,就難免要

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包