數據結構 Java DS——鏈表部分經典題目 (1)

前言

筆者計劃在暑假啃完JavaDS,Mysql的內容當然也會繼續更

這次給讀者們分享的是鏈表的幾個比較典型的題目,關于如何手搓一個鏈表,筆者還在籌劃中,

畢竟鏈表的種類也有那么多,但是在下面的題目中,只有單向鏈表

題目一 : 反轉鏈表

206. 反轉鏈表 - 力扣(LeetCode)

?很明顯,想要反轉一個鏈表,就要改變他們的地址域,具體是這樣 改變的,將他們地址域的值由后一個節點的地址改為前一個節點的地址,同時注意,原head節點的 地址域應為NULL,因為反轉以后,他就是最后一個節點了,因此,我們需要兩個臨時變量

具體寫法如下

class Solution {public ListNode reverseList(ListNode head) {ListNode pre= null;ListNode cur=head;while(cur!=null){ListNode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}return pre;
}
}

?具體解釋如下:

cur是頭節點,沒什么問題,pre負責的是存儲上一個節點的地址,在反轉以后,head節點的地址域是空的,所以pre也就是空的

在循環中,首先定義一個臨時變量存儲節點原本的地址,即下一個節點的位置

然后將上一個節點的位置(pre)存在地址域,然后將pre更新為當前節點的位置,然后cur變為nextnode;

為什么不直接cur=cur.next?? 因為cur.next已經被更新了,需要有一個臨時變量存原本的next;

這里的題目要求返回頭節點,一般來說,反轉也可以這么寫

   public void reverseList(){Listnode pre=null;Listnode cur=head;while(cur!=null){Listnode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}this.head=pre;}

將pre設置為新的頭以后,再通過display() 遍歷

也可指定節點開始反轉,只要把cur設置為指定節點即可;?

   public void reverseList( 指定節點 node){Listnode pre=null;Listnode cur=node;while(cur!=null){Listnode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}this.head=pre;}

題目二 :移除鏈表元素

203. 移除鏈表元素 - 力扣(LeetCode)

?想要移除這些節點,就要改變他們前一個節點的地址域,也就是說,把他們的地址域改成下一個節點的,直接跳過需要刪除的元素

比如我畫的示意圖

?代碼實現如下

class Solution {public ListNode removeElements(ListNode head, int val){ListNode shaobing = new ListNode(0);shaobing.next = head;ListNode temp = shaobing;while(temp.next!=null){if(temp.next.val==val){temp.next= temp.next.next;}else{temp=temp.next;}}return shaobing.next;
}
}

這樣也就搞定了

題目三: 鏈表的中間節點

876. 鏈表的中間結點 - 力扣(LeetCode)

?這個就是快慢指針的套路,快指針走兩步,慢指針一步,然后找到中間節點

class Solution {public ListNode middleNode(ListNode head) {if (head == null) {return null;}ListNode slow = head;ListNode fast = head;// 快指針每次移動兩步,慢指針每次移動一步while(fast!=null&& fast.next!=null){slow=slow.next;fast=fast.next.next;}return slow;}
}

?條件就是 快指針的本身不為空,以及它的下一步不能為空

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

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

相關文章

什么是 VueQuill(前端的富文本編輯器)?

什么是 VueQuill? 1. 簡介 VueQuill 是 Vue.js 的一個富文本編輯器插件,它基于 Quill 編輯器構建,提供了簡潔且功能強大的富文本編輯功能。Quill 是一個現代化的富文本編輯器,提供豐富的文本編輯能力,支持多種格式和…

paddlenlp cpu windows 下測試gpt

paddlenlp 安裝python3.11版本 conda create -n python311 python3.11 激活python conda activate python311 安裝paddlepaddle conda install paddlepaddle3.0.0b0 -c paddle pip install paddlenlp3.0.0b0 -U -i https://pypi.tuna.tsinghua.edu.cn/simple windows下…

RockYou2024 發布史上最大密碼憑證

參與 CTF 的每個人都至少使用過一次臭名昭著的rockyou.txt單詞表,主要是為了執行密碼破解活動。 該文件是一份包含1400 萬個唯一密碼的列表。 源自 2009 年的 RockYou 黑客攻擊,創造了計算機安全歷史。 多年來,“rockyou 系列”不斷發展。…

爬蟲怎么實現抓取的

1.4爬蟲工程師常用的庫通過圖1-3我們了解到,爬蟲程序的完整鏈條包括整理需求、分析目標、發出網絡請求、文本解析、數據入庫和數據出庫。其中與代碼緊密相關的有:發出網絡請求、文本解析、數據入庫和數據出庫,接下來我們將學習不同階段中爬蟲…

C++OCR API減輕人們文字錄入的負擔

曾幾何時,許多大企業會設立文字錄入專員的崗位。相信有不少人第一份實習工作就是錄入資料,文檔、發票、證件等形形色色的文件堆積如山,日積月累的敲擊鍵盤,一張一張的錄入電腦系統。這種工作是枯燥的,可以練就文字錄入…

實驗01 黑盒測試方法(等價類劃分、邊界值分析)

一 實驗目的: 1、理解黑盒測試的定義; 2、掌握等價類劃分法; 3、掌握邊界值分析法。 二 實驗環境 1、Windows操作系統計算機; 三 實驗準備 1、理解黑盒測試的定義; 2、等價類劃分法原則; 3、邊界值分…

Java反射與Fastjson的危險反序列化

什么是Java反射? 在前文中,我們有一行代碼 Computer macBookPro JSON.parseObject(preReceive,Computer.class); 這行代碼是什么意思呢?看起來好像就是我們聲明了一個名為 macBookPro 的 Computer 類,它由 fastjson 的 parseObje…

Java入門-Day7-面對對象基礎-構造器

(1)特點 創建對象時,對象會去調用構造器 (2)應用場景 創建對象時,同時完成對對象的成員變量(屬性),的初始化 (3)注意事項 //Sutdent構造器 注…

Java 幼兒園(20240709)多來源列表映射多實現類

1、功能場景 對接多個外部廠商,比如多個銀行的賬單獲取,需要根據銀行信息執行對應的實現類。 2、功能代碼 (1)YAML配置來源列表 bank-source: bank_001, bank_002, bank_003 (2)外部來源枚舉 public …

《夢醒蝶飛:釋放Excel函數與公式的力量》10.2 COMPLEX函數

第二節 10.2 COMPLEX函數 10.2.1函數簡介 COMPLEX函數是Excel中的一個工程函數,用于將實部和虛部組合成一個復數。復數廣泛應用于工程、電氣、物理等領域,COMPLEX函數提供了方便的復數表示和計算方法。 10.2.2語法: COMPLEX(real_num, i_…

flex 填滿剩余空間

常見的flex屬性值: 1.flex:1,也就是flex-grow:1,也就是上面說的自動放大填充滿剩余空間,若有其他子盒子設置flex,則平分。 2.flex:0 0 auto,等同于flex:none,子元素的長度決定它的長度,當整體空間不足時,它也不會縮小&…

swift獲取app網絡和本地網絡權限

請求藍牙權限: //藍牙if #available(iOS 13.1, *) {let autostate CBManager.authorizationif(autostate .notDetermined){print("")self.manager CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPo…

JavaScript中的LHS和RHS

LHS和RHS之前我們先來回憶一下最簡單的賦值操作! var test100; console.log(test); 以上代碼的意思簡單我們理解為把右邊的值賦值給左邊的test變量,然后輸出打印結果。 可是我們要是深入理解你就會發現在這個過程當中,還發生了一些其他的事情 而這些事情就是今天…

C語言 printf函數緩沖機制

printf不立即打印到stdout的原因 printf函數使用了緩沖機制。當我們調用printf時,輸出通常不會立即顯示在屏幕上,而是先存儲在一個緩沖區中。這是為了提高I/O操作的效率。 緩存數據輸出的原理 stdio庫維護了一個緩沖區。當緩沖區滿了,或者在特定條件下,緩沖區的內容會被刷新…

前端如何讓網頁頁面完美適配不同大小和分辨率屏幕

推薦使用postcss插件,它會自動將項目所有的px單位統一轉換為vw等單位(包括npm安裝的第三方組件),從而實現適配,具體配置規則可參考官網或npm網站介紹。 另外對于大屏的適配,需要縮放網頁,可使用…

歐姆龍安全PLC及周邊產品要點指南

電氣安全、自動化設備作業安全,向來是非常非常之重要的!越來越多的客戶在規劃新產線、改造既有產線的過程中,明確要求設計方和施工方將安全考慮進整體方案中進行考慮和報價!作為一名自動化電氣工程師,尤其是高級工程師…

養寵經驗分享貓咪經常掉毛怎么辦?最值得買的寵物空氣凈化器分享

身為資深鏟屎官,深知若偷懶不打掃,家中便成貓毛紛飛、異味繚繞的戰場,尤其換季時,更是雪上加霜。長期處于這樣的環境,不僅我們頭疼眼澀、咳嗽氣喘,對老人、小孩、孕婦等敏感群體更是健康大敵。 幸運的是&a…

Vagrant配合VirtualBox搭建虛擬機

目錄 前言一、軟件下載及安裝1.下載2.安裝擴展: 二、創建一個虛擬機1.Vagrant官方鏡像倉庫 三、使用遠程工具連接虛擬機1.修改相關配置文件 四、虛擬機克隆及使用1.通用配置2.簡單搭建一個java環境3.克隆虛擬機1.重命名虛擬機(可選)2.打包指定…

靶場練習 手把手教你通關DC系列 DC1

DC1靶場通關教程 文章目錄 DC1靶場通關教程前言一、信息收集1.主機存活2.端口收集3.網頁信息收集4.目錄收集4.1 Nikto4.2 Dirb 信息收集總結 二、漏洞發現與利用1. 發現2. 利用 三、FlagFlag1Flag2Flag3Flag4Flag5(提權) 前言 本次使用的kali機的IP地址為192.168.243.131 DC1的…

機器學習 - 比較檢驗

列聯表 列聯表(Contingency Table)是一種用于顯示兩個或多個分類變量之間關系的表格。它廣泛應用于統計學中的分類數據分析,尤其在獨立性檢驗和關聯性分析時。列聯表的每個單元格展示了相應分類變量組合的頻數(或比例&#xff09…