刪除鏈表的倒數第N個結點

題目:
?

給你一個鏈表,刪除鏈表的倒數第?n?個結點,并且返回鏈表的頭結點。

示例 1:

輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]

示例 2:

輸入:head = [1], n = 1
輸出:[]

示例 3:

輸入:head = [1,2], n = 1
輸出:[1]

思路1:暴力遍歷

很簡單的遍歷完鏈表,一邊遍歷一邊計數n,刪除倒數第N個結點,即刪除正數第n-N+1個結點。

代碼實現:
?

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
int getlen(struct ListNode* head){int lenth=0;while(head){head=head->next;lenth++;}return lenth;
}
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct ListNode* cur=dummy;int len=getlen(head);for(int i=0;i<len-n;i++){cur=cur->next;}cur->next=cur->next->next;struct ListNode* ans=dummy->next;free(dummy);return ans;
}

思路2:遞歸

鏈表天生自帶的遞歸性質在這個簡單條件面前自然也可以使用,在無法知道鏈表結點數的情況下,我們就自然無法在遞的上面做文章,自然而然就只能在歸的過程中進行計數,歸一次就計數N++

代碼實現:
?

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {static int N;//這里比較特別的一點就是我們使用靜態變量,作用是在不同的歸的棧中使得變量不改變while(!head){N=0;return head;}head->next=removeNthFromEnd(head->next, n);N++;if(N==n){struct ListNode* tmp=head->next;free(head);return tmp;}return head;
}

思路3:雙指針

第一個暴力遍歷的效率不高的一大原因就是因為遍歷的次數重復了一次,增添一個指針自然可以漸少一次遍歷,利用前后指針的范圍差,準確的確定倒數第N個結點的所在處

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct ListNode* pre=dummy;struct ListNode* cur=dummy;for(int i=0;i<n-1;i++){cur=cur->next;}while(cur->next->next){pre=pre->next;cur=cur->next;}pre->next=pre->next->next;struct ListNode* tmp=dummy->next;free(dummy);return tmp;
}

思路4:棧

用棧來裝下所有的結點,再一步一步出棧。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct STACK{struct ListNode* val;struct STACK* next;};
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy=malloc(sizeof(struct ListNode));dummy->val=0;dummy->next=head;struct STACK* stk=NULL;struct ListNode* cur=dummy;while(cur){struct STACK* tmp=malloc(sizeof(struct STACK));tmp->val=cur;tmp->next=stk;stk=tmp;cur=cur->next;}for(int i=0;i<n;i++){struct STACK* tmp=stk->next;free(stk);stk=tmp;}struct ListNode* pre=stk->val;pre->next=pre->next->next;struct ListNode* ans=dummy->next;free(dummy);return ans;
}

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

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

相關文章

機器學習實戰-第5章 Logistic回歸

Logistic 回歸 概述 Logistic 回歸 或者叫邏輯回歸 雖然名字有回歸,但是它是用來做分類的。其主要思想是: 根據現有數據對分類邊界線(Decision Boundary)建立回歸公式,以此進行分類。 須知概念 Sigmoid 函數 回歸 概念 假設現在有一些數據點,我們用一條直線對這些點進行…

淺析基于智能音視頻技術的城市重要場館智能監控系統設計

了解旭帆科技的朋友都知道&#xff0c;旭帆科技一直都樂于和大家分享各類場景的視頻解決方案&#xff0c;今天小編就基于智能音視頻技術的城市重要場館智能監控系統設計和大家探討一下。 基于智能音視頻技術的城市重要場館智能監控系統設計&#xff0c;主要包含以下要素&#x…

外部 prometheus監控k8s集群資源(pod、CPU、service、namespace、deployment等)

prometheus監控k8s集群資源 一&#xff0c;通過CADvisior 監控pod的資源狀態1.1 授權外邊用戶可以訪問prometheus接口。1.2 獲取token保存1.3 配置prometheus.yml 啟動并查看狀態1.4 Grafana 導入儀表盤 二&#xff0c;通過kube-state-metrics 監控k8s資源狀態2.1 部署 kube-st…

手把手教你編寫LoadRunner腳本

編寫 LoadRunner 腳本需要熟悉腳本語言、業務場景、參數化技術、斷言和事務等基礎知識。 在實際編寫時&#xff0c;可以根據具體測試需求&#xff0c;結合實際情況進行合理的配置和調整。 基本步驟 創建腳本 在 LoadRunner 的 Controller 模塊中&#xff0c;創建一個新的測…

linux centos上安裝python3.11.x詳細完整教程

一. 安裝步驟 注意&#xff1a; 1、安裝python3.11的其他版本替換下面的版本信息即可。(如想安裝3.11.5將案例中的3.11.0替換成3.11.5即可) #下載最新的軟件安裝包 wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz#解壓縮安裝包 tar -xzf Python-3.11.0.tg…

gRPC之gRPC負載均衡(客戶端負載均衡)(etcd)

1、gRPC負載均衡(客戶端負載均衡)(etcd) 本篇將基于etcd的服務發現前提下&#xff0c;介紹如何實現gRPC客戶端負載均衡。 1.1 gRPC負載均衡 gRPC官方文檔提供了關于gRPC負載均衡方案Load Balancing in gRPC https://github.com/grpc/grpc/blob/master/doc/load-balancing.m…

Jackson無縫替換Fastjson

目錄 文章目錄 一&#xff0c;Fastjson到Jackson的替換方案方案代碼序列化反序列化通過key獲取某種類型的值類型替換 二&#xff0c;Springboot工程中序列化的使用場景三&#xff0c;SpringMVC框架中的Http消息轉換器1&#xff0c;原理&#xff1a;2&#xff0c;自定義消息轉換…

什么是mvc原理是什么

MVC是一種設計模式&#xff0c;它將應用程序分為三個部分&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 模型&#xff08;Model&#xff09;表示應用程序的數據結構&#xff0c;包括與數據相…

常用腳本-持續更新(文件重命名、視頻抽幀、拆幀)

所有代碼位置&#xff1a;Learning-Notebook-Codes/Python/常用腳本 1. 文件重命名 1.1 說明 腳本路徑&#xff1a;codes/files_rename.py腳本說明&#xff1a;可以自動重命名某個文件夾下指定類型的文件。 修改前文件名稱: img1.jpg修改后文件名稱: Le0v1n-20231123-X-0001…

python-opencv在圖片中繪制各種圖形

python-opencv在圖片中繪制各種圖形 1.繪制直線 2.繪制矩形 3.繪制圓 4.繪制橢圓 5.繪制多邊形 6.嵌入文字 實現代碼都在下面了&#xff0c;代碼中參數做了簡單注釋 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

window非gui形式運行jmeter腳本

配置jmeter環境 新增1個環境變量&#xff1a; JMETER_HOMED:\Tools\apache-jmeter-5.0 【jmeter文件夾】 編輯CLASSPATH&#xff1a; CLASSPATH后面加上 %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar; 編輯path&#xff1a; path后面加上 %JM…

二次開發問題匯總【C#】

1未將對象引用到實例。 接口函數的參數不對。解決辦法【用fixed去限制數組長度】 unsafe public struct VCI_BOARD_INFO {public UInt16 hw_Version;public UInt16 fw_Version;public UInt16 dr_Version;public UInt16 in_Version;public UInt16 irq_Num;public byte can_Num;…

C語言眾數問題(ZZULIOJ1201:眾數問題)

題目描述 給定含有n個元素的多重集合S&#xff0c;每個元素在S中出現的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。 例如&#xff0c;S{1&#xff0c;2&#xff0c;2&#xff0c;2&#xff0c;3&#xff0c;5}。多重集S的眾數是2&#xff0c;其重數為3。 編程任務…

前端學習--React(3)

一、Redux 集中狀態管理工具&#xff0c;不需要react即可使用&#xff0c;每個store的數據都是獨立于組件之外的 vue小鏈接&#xff1a;vuex/pinia 基本使用 Redux將數據修改流程分成三個概念&#xff0c;state、action和reducer state - 一個對象 存放我們管理的數據狀態 a…

1688API如何獲取商品詳情信息(關鍵詞搜索商品列表),1688API接口開發系列

1688商品詳情接口是指1688平臺提供的API接口&#xff0c;用于獲取商品詳情信息。通過該接口&#xff0c;您可以獲取到商品的詳細信息&#xff0c;包括商品標題、價格、庫存、描述、圖片等。 要使用1688商品詳情接口&#xff0c;您需要先申請1688的API權限&#xff0c;并獲取ac…

UML建模圖文詳解教程01——Enterprise Architect安裝與使用

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方網站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;圖示如下&#xff1a; Enterprise Architect是一個全功能的、基于…

Python入門02 算術運算符及優先級

目錄 1 REPL2 啟動3 算術運算符4 算術運算符的優先級5 清除屏幕總結 上一節我們安裝了Python的開發環境&#xff0c;本節我們介紹一下REPL的概念 1 REPL 首先解釋一下python執行代碼的一個交互環境的定義&#xff1a; Python REPL&#xff08;Read-Eval-Print Loop&#xff0c…

靠這份求職指南找工作,穩了!

大家好&#xff0c;我是魚皮。為了幫助朋友們更好的準備秋招&#xff0c;我們精心匯總整理了 編程導航星球 內魚友反饋的 200 多個高頻求職問題和 150 多篇面經、以及最新秋招企業投遞信息表&#xff0c;解答大家的求職困惑。 一、最新秋招投遞信息表 目前已匯總整理了 600 多家…

C百題--3.求未知數

1.問題描述 一個正整數&#xff0c;它加上100后是一個完全平方數&#xff0c;再加上168又是一個完全平方數&#xff0c;請問該數是多少&#xff1f; 2.解決思路 遍歷這個數&#xff0c;讓其從1開始&#xff0c;到100000結束 3.代碼實現 #include<stdio.h> #include&…