【力扣】移除鏈表元素203

目錄

  • 1.前言
  • 2. 題目描述
  • 3. 題目分析
    • 3.1 不帶哨兵位
    • 3.2 帶哨兵位
  • 4. 附代碼
    • 4.1 不帶哨兵位
    • 4.2 帶哨兵位

1.前言

這里開始介紹從網上一些刷題網站上的題目,在這里做一些分享,和學習記錄。
先來介紹一些力扣的OJ題目。
這里的OJ就是我們不需要寫主函數,力扣會提供一個接口,在力扣中會調用我們所寫的代碼和它后臺的匹配,從而判斷我們寫的代碼正確性。

在力扣的題目中一般會給一些示例,就像這樣:
在這里插入圖片描述
當我們寫完代碼時可以點擊運行,這時下面會出現一些測試用例,就像下面這樣:
在這里插入圖片描述
但是并不是給了運行成功就一定能成功,必須點擊上面的提交,通過了才是真正的正確,就像下面這樣:
在這里插入圖片描述

2. 題目描述

在這里插入圖片描述

3. 題目分析

這里題目明確指出需要返回的是新的鏈表,所以要返回一個新鏈表的頭節點。
當我們沒有任何思路時,可以先看看它給的示例,先進行一下分析。
在這里插入圖片描述
要找到不是val值的節點,那么首先肯定要先遍歷原來的鏈表,把不是的插入到新的鏈表中。

那首先就得先定義一個新的鏈表的頭指針struct ListNode* newhead=NULL;為了方便實現插入,使用尾插,再定義一個新鏈表的尾指針方便插入struct ListNode* tail=NULL;接下來就需要原鏈表中找出不是val值的節點,然后尾插就行。

怎么找出不是val值的節點?
為了不使原鏈表中的頭節點丟失,用定義一個cur指針代替,struct ListNode* cur=head;
用一個while循環,當cur為空時就結束,也就是cur已經把原鏈表遍歷完了。

這里需要先考慮一下如果原鏈表為空,那就直接返回NULL就行。

在循環中怎么寫找到val的代碼?
那就先讓cur往后走,當走到cur->val=val結束,所以這里插入的條件就是if(cur->val!=val),然后開始實現尾插。

3.1 不帶哨兵位

這里還需要先判斷一下新的鏈表是不是為空,如果為空,那就直接將cur=newhead,并且更新一下tail=cur;如果不為空,那就直接實現尾插。

        if(cur->val!=val){if(newhead==NULL){newhead=cur;tail=cur;}else{tail->next=cur;tail=tail->next;}

然后讓cur繼續往后遍歷。
當找到原鏈表中節點值為val的節點是時,就刪除:

struct ListNode* tmp=cur;cur=cur->next;free(tmp);

這里加一個尾指針的判斷

if(tail){tail->next=NULL;}

最后直接返回新節點的頭指針。
在這里插入圖片描述

3.2 帶哨兵位

使用帶哨兵位的新鏈表, newhead=tail=(struct ListNode*)malloc(sizeof(struct ListNode));就不需要判斷新鏈表是否為空。
其它地方都與不帶哨兵位一樣,不過最后得把申請的哨兵位釋放掉,返回的是哨兵位的后一個節點。

     struct ListNode* tmp=newhead;newhead=newhead->next;free(tmp);return newhead;  

在這里插入圖片描述

4. 附代碼

4.1 不帶哨兵位


struct ListNode* removeElements(struct ListNode* head, int val) 
{struct ListNode* newhead=NULL;struct ListNode* tail=NULL;struct ListNode* cur=head;while(cur){if(cur->val!=val){if(newhead==NULL){newhead=cur;tail=cur;}else{tail->next=cur;tail=tail->next;}cur=cur->next;}else{struct ListNode* tmp=cur;cur=cur->next;free(tmp);}}if(tail){tail->next=NULL;}return newhead;    
}

4.2 帶哨兵位


struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* newhead=NULL;struct ListNode* tail=NULL;struct ListNode* cur=head;newhead=tail=(struct ListNode*)malloc(sizeof(struct ListNode));while(cur){if(cur->val!=val){tail->next=cur;tail=tail->next;cur=cur->next;}else{struct ListNode* tmp=cur;cur=cur->next;free(tmp);}}tail->next=NULL;struct ListNode* tmp=newhead;newhead=newhead->next;free(tmp);return newhead;   
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211459.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211459.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據表記錄的操作

一、數據添加 1、打開SSMS,附加數據庫(數據庫文件在自己的文件夾下面),并進行下面的設置: (1)設置“部門信息”表中的“編號”為主鍵(SSMS) 首先建立好所需的數據庫庫…

華為OD機試 - 生成哈夫曼樹(Java JS Python C)

題目描述 給定長度為 n 的無序的數字數組,每個數字代表二叉樹的葉子節點的權值,數字數組的值均大于等于1。 請完成一個函數,根據輸入的數字數組,生成哈夫曼樹,并將哈夫曼樹按照中序遍歷輸出。 為了保證輸出的二叉樹中序遍歷結果統一,增加以下限制: 二叉樹節點中,左節…

java中什么是線程池?

線程池(Thread Pool)是一種線程管理的機制,它主要解決了線程生命周期的開銷和資源消耗問題。線程池在程序中創建一些預先定義數量的線程,將任務分配給這些線程,從而提高了線程的重用性和性能。線程池的核心思想是將創建…

為 Compose MultiPlatform 添加 C/C++ 支持(3):實戰 Desktop、Android、iOS 調用同一個 C/C++ 代碼

theme: serene-rose 前言 在本系列的前兩篇文章中我們已經學會了如何在 kotlin native 平臺(iOS)使用 cinterop 調用 C/C 代碼。以及在 jvm 平臺(Android、Desktop)使用 jni 調用 C/C 代碼,并且知道了如何自動編譯 A…

Git 五分鐘教程速度入門

Git 五分鐘教程速度入門 分類 編程技術 許多人認為 Git 太混亂,或認為它是一種復雜的版本控制系統,其實不然,這篇文章有助于大家快速上手使用 Git。 入門 使用Git前,需要先建立一個倉庫(repository)。您可以使用一個已經存在的…

Win10操作系統安裝Python

1 Python解釋器下載 1.1 安裝環境 Windows 10 專業工作站版22H2 python-3.9.6-amd64.exe 1.2 下載地址 Python官網:Welcome to Python.org Python鏡像:CNPM Binaries Mirror 2 Python解釋器安裝 2.1 Install Python 3.9.6 (64-bit)界面 雙擊運行下…

鴻蒙開發組件之list

1、鴻蒙中的list作為可滑動列表功能,初始化方式是 List({space: 10}){ForEach(arr, item > {ListItem() {//列表單個Item組件}})} 其中,List中的space可以設置兩個ListItem組件的間距 List中是一個ForEach,需要注意的是item要返回的是L…

【數據結構】面試OJ題———棧|隊列|互相實現|循環隊列|括號匹配

目錄 1. 有效的括號 思路: 2.用隊列實現棧 思路: 3.用棧實現隊列 思路: 4.設計循環隊列 思路: 1. 有效的括號 20. 有效的括號 - 力扣(LeetCode) 給定一個只包括 (,),{&…

Hive SQL間隔連續問題

問題引入 下面是某游戲公司記錄的用戶每日登錄數據, 計算每個用戶最大的連續登錄天數,定義連續登錄時可以間隔一天。舉例:如果一個用戶在 1,3,5,6,9 登錄了游戲,則視為連續 6 天登錄。 id dt1001 2021-12-121002 2021-12-12…

visual studio code 好用的插件

vscode-icons Better comments 該插件對不同類型的注釋會附加了不同的顏色,更加方便區分,幫助我們在代碼中創建更人性化的注釋。 Error Lens Error Lens插件是一款可以檢測你編寫的代碼的語法錯誤,并且會顯示出對語法錯誤的診斷信息…

USB的高速速率是如何確定的?

從全局說起。先說host對dev的插入檢測。由于dev插入到host,導致為0的D和D-線突然有了電平變化,有且只有一根線的電平會變。在高速和全速模式下,D線會被拉高;在低速模式下D-線會被拉高。同時,host會對插入的dev進行消抖…

RCNN 學習

RCNN算法流程 RCNN算法流程可分為4個步驟 一張圖像生成1K~2K個候選區域(使用Selective Search方法)對每個候選區域,使用深度網絡圖特征特征送入每一類的SVM分類器,判別是否屬于該類使用回歸期器細修正候選框位置 1.候選區域的生…

【星海隨筆】Prometheus(一)

注:Pagerduty作為報警系統,出鏡率很高。 雖然收費,但對于企業來說很便宜。 一個月幾十美金 不太支持中文,主要是語音方面。 Prometheus 查詢語句 , 基于數學運算模式的監控查詢 我們計算一下一天多少秒 1 * 24 * 60 *…

ChatGPT是科學還是藝術?

OpenAI最近談到GPT4變懶的問題,說“它更像是多人共同參與的藝術創作”,那到底大模型是科學還是藝術?

公式識別任務各個鏈條全部打通

目錄 引言公式識別任務是什么?公式識別任務解決方案初探使用建議寫在最后 引言 隨著LaTeX-OCR模型轉換問題的解決,公式識別任務中各個鏈條已經全部打通。小伙伴們可以放開膀子干了。 解決業界問題的方案,并不是單獨訓練一個模型就完事了&am…

如何確認網站是否有漏洞,如何找出網站存在的漏洞,找到漏洞該如何處理

如何確認網站或者服務器是否有漏洞 判斷一個網站是否是存在漏洞的方法: 1.可以借助德迅云安全漏洞掃描功能來檢查漏洞。 2.打開德迅云安全首頁,點擊最上面導航欄中的“安全產品”。 3.滑到“漏洞掃描”,選擇“產品價格”服務。 4.選擇您需…

【力扣】141和142環形鏈表

141.環形鏈表 法一:快慢指針 思路: 用兩個指針slow,fast,后者能比前者多走一步路,那判斷是不是有環,只需要判斷是否會相遇。 就是有一個能比烏龜跑2倍快的兔子,兩小只都在有環的路上跑,那是不是肯定會相…

golang開發之個微機器人的二次開發

簡要描述: 下載消息中的文件 請求URL: http://域名地址/getMsgFile 請求方式: POST 請求頭Headers: Content-Type:application/jsonAuthorization:login接口返回 參數: 參數名必選類型…

java基礎之TreeMap詳解

TreeMap詳解 TreeMap是Map接口的一個實現類,底層基于紅黑樹的實現,按照key的順序存儲 TreeMap 從繼承結構可以看到TreeMap除了繼承了AbstractMap類,還實現了NavigableMap接口,而NavigableMap接口是繼承自SortedMap接口的&#xff…

使用Vue3+Typescript手寫一個日歷簽到組件

設計理念 昨天寫了個簡單美觀的日歷簽到組件,使用的是Vue3TypeScript,大概邏輯是先找到本月份第一天是周幾,然后開始填充月份日期:weeksArray:[[]]:之后渲染到表格中,對于簽到事件觸發則先判斷是否是今天且還未沒有簽…