數據結構與算法 —— 鏈表linked list(01)

鏈表(維基百科)

鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是并不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針(Pointer)。由于不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序表快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間復雜度分別是O(logn)和O(1)。使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由于增加了結點的指針域,空間開銷比較大。在計算機科學中,鏈表作為一種基礎的數據結構可以用來生成其它類型的數據結構。鏈表通常由一連串節點組成,每個節點包含任意的實例數據(data fields)和一或兩個用來指向上一個/或下一個節點的位置的鏈接("links")。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同于這些數據項目在記憶體或磁盤上順序,數據的訪問往往要在不同的排列順序中轉換。而鏈表是一種自我指示數據類型,因為它包含指向另一個相同類型的數據的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。單向鏈表(又名單鏈表、線性鏈表)是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表的訪問要通過從頭部開始,依序往下讀取.

定義

我們來看一下單向鏈表的定義實現:

class ListNode(object):def __init__(self, value):self.value = valueself.next = None

 一個節點有value的屬性定義該節點的值,還有一個next的指針,指向下一個節點,類似于1>2>4>5>6>3這樣。

操作

單向鏈表的操作主要有:添加一個節點,刪除一個節點,遍歷一條鏈表,具體的實現如下:

def add(pre, new_node):"""pre節點后面插入一個新的節點:param pre: pre節點:param new_node: 新插入的節點:return:"""new_code.next = pre.nextpre.next = new_nodedef delete(pre):"""pre節點的后面刪除一個節點:return:"""if pre.next:pre.next = pre.next.nextdef traverse(head):while head:print(head.value)head = head.next

  在pre節點后面插入一個節點:只需要把新節點的指針指向pre節點指針指向的節點,把pre節點的指針指向新節點。

  在pre節點后面刪除一個節點:只需要把pre節點的指針指向pre節點的指針的指針節點(要注意pre節點的指針不為None)

?題目

我們來看一個關于鏈表的一個算法題,來自于leetcode:

刪除鏈表中的元素


刪除鏈表中等于給定值?val?的所有元素。

示例
給定:?1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6,?val?= 6
返回:?1 --> 2 --> 3 --> 4 --> 5

分析:一般來講,我們首先會考慮到遍歷一下這個鏈表,移除掉value值等于給定val的節點就好。但是這里要返回一個新的鏈表,我們知道,對于單向鏈表,我們只能知道當前元素的后置節點,而不知道當前元素的前置節點。所以我們要構建一個前置節點。

   看代碼:

def removeElements(head, val):""":param head: listNode:param val: int:return: listNode"""dump = ListNode(-1)dump.next = headcur = headpre = dumpwhile cur:if cur.value == val:pre.next = cur.nextelse:pre = pre.nextcur = cur.nextreturn dump.next

  我們構建一個dump節點作為第一個節點,cur節點為當前循環的節點,pre節點為cur節點的前置節點。

  當前節點的value為給定val的時候,把當前cur的前置節點pre指針指向cur的后置節點,也就是cur.next。然后接著遍歷這個鏈表。

  由于第一個節點dump是我們自己構造的(我用的值是-1,你可以用其他不為val的值,一般使用-1),它的next是給出的head,我們只是對head做了調整。所以最后新的列表就是dump.next,也就是調整后的head。

?

學習技術交流群:226704167,愿和各位一起進步!

?

轉載于:https://www.cnblogs.com/lip0121/p/8668023.html

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

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

相關文章

離群值如何處理_有理處理離群值的局限性

離群值如何處理ARIMA models can be quite adept when it comes to modelling the overall trend of a series along with seasonal patterns.ARIMA模型可以很好地建模一系列總體趨勢以及季節性模式。 In a previous article titled SARIMA: Forecasting Seasonal Data with P…

網絡爬蟲基礎練習

0.可以新建一個用于練習的html文件,在瀏覽器中打開。 1.利用requests.get(url)獲取網頁頁面的html文件 import requests newsurlhttp://news.gzcc.cn/html/xiaoyuanxinwen/ res requests.get(newsurl) #返回response對象 res.encodingutf-8 2.利用BeautifulSoup的H…

10生活便捷:購物、美食、看病時這樣搜,至少能省一半心

本次課程介紹實實在在能夠救命、省錢的網站,解決了眼前這些需求后,還有“詩和遠方”——不花錢也能點亮自己的生活,獲得美的享受! 1、健康醫療這么搜,安全又便捷 現在的醫療市場確實有些混亂,由于醫療的專業…

ppt圖表圖表類型起始_梅科圖表

ppt圖表圖表類型起始There are different types of variable width bar charts but two are the most popular: 1) Bar Mekko chart; 2) Marimekko chart.可變寬度條形圖有不同類型,但最受歡迎的有兩種:1)Mekko條形圖; 2)Marimekko圖表。 Th…

Tomcat日志亂碼了怎么處理?

【前言】 tomacat日志有三個地方,分別是Output(控制臺)、Tomcat Localhost Log(tomcat本地日志)、Tomcat Catalina Log。 啟動日志和大部分報錯日志、普通日志都在output打印;有些錯誤日志,在Tomcat Localhost Log。 三個日志顯示區,都可能…

python 編碼規范

縮進 用4個空格來縮進代碼 分號 不要在行尾加分號, 也不要用分號將兩條命令放在同一行。 行長度 每行不超過80個字符 以下情況除外: l 長的導入模塊語句 l 注釋里的URL 不要使用反斜杠連接行。 Python會將 圓括號, 中括號和花括號中的行隱式的連接起來 , 你可以利用…

5888. 網絡空閑的時刻

5888. 網絡空閑的時刻 給你一個有 n 個服務器的計算機網絡,服務器編號為 0 到 n - 1 。同時給你一個二維整數數組 edges ,其中 edges[i] [ui, vi] 表示服務器 ui 和 vi 之間有一條信息線路,在 一秒 內它們之間可以傳輸 任意 數目的信息。再…

django框架預備知識

內容: 1.web預備知識 2.django介紹 3.web框架的本質及分類 4.django安裝與基本設置 1.web預備知識 HTTP協議:https://www.cnblogs.com/wyb666/p/9383077.html 關于web的本質:http://www.cnblogs.com/wyb666/p/9034042.html 如何自定義web框架…

現實世界 機器學習_公司溝通分析簡介現實世界的機器學習方法

現實世界 機器學習In my previous posts I covered analytical subjects from a scientific point of view, rather than an applied real world problem. For this reason, this article aims at approaching an analytical idea from a managerial point of view, rather tha…

拷貝構造函數和賦值函數

1、拷貝構造函數:用一個已經有的對象構造一個新的對象。 CA(const CA & c )函數的名稱必須和類名稱相一致,它的唯一的一個參數是本類型的一個引用變量,該參數是const 類型,不可變。 拷貝構造函數什么時…

[bzoj3036]綠豆蛙的歸宿

題目大意:給定 $DAG$ 帶邊權連通圖,保證所有點都能到達終點 $n$,每個點等概率沿邊走,求起點 $1$ 到終點 $n$ 的期望長度。 題解:拓撲,然后倒著$DP$就可以了 卡點:無 C Code: #includ…

5902. 檢查句子中的數字是否遞增

5902. 檢查句子中的數字是否遞增 句子是由若干 token 組成的一個列表,token 間用 單個 空格分隔,句子沒有前導或尾隨空格。每個 token 要么是一個由數字 0-9 組成的不含前導零的 正整數 ,要么是一個由小寫英文字母組成的 單詞 。 示例&…

蒜頭君吃桃

蒜頭君買了一堆桃子不知道個數,第一天吃了一半的桃子,還不過癮,有多吃了一個。以后他每天吃剩下的桃子的一半還多一個,到 nn 天只剩下一個桃子了。蒜頭君想知道一開始買了多少桃子。 輸入格式 輸入一個整數 n(2≤n≤60)&#xff0…

Chrome keyboard shortcuts

2019獨角獸企業重金招聘Python工程師標準>>> Chrome keyboard shortcuts https://support.google.com/chrome/answer/157179?hlen 轉載于:https://my.oschina.net/qwfys200/blog/1927456

數據中心細節_當細節很重要時數據不平衡

數據中心細節定義不平衡數據 (Definition Imbalanced Data) When we speak of imbalanced data, what we mean is that at least one class is underrepresented. For example, when considering the problem of building a classifier, let’s call it the Idealisstic-Voter.…

辛普森悖論_所謂的辛普森悖論

辛普森悖論We all know the Simpsons family from Disneyland, but have you heard about the Simpson’s Paradox from statistic theory? This article will illustrate the definition of Simpson’s Paradox with an example, and show you how can it harm your statisti…

查看NVIDIA使用率工具目錄

2019獨角獸企業重金招聘Python工程師標準>>> C:\Program Files\NVIDIA Corporation\Display.NvContainer\NVDisplay.Container.exe 轉載于:https://my.oschina.net/u/2430809/blog/1927560

2043. 簡易銀行系統

2043. 簡易銀行系統 你的任務是為一個很受歡迎的銀行設計一款程序,以自動化執行所有傳入的交易(轉賬,存款和取款)。銀行共有 n 個賬戶,編號從 1 到 n 。每個賬號的初始余額存儲在一個下標從 0 開始的整數數組 balance…

余弦相似度和歐氏距離_歐氏距離和余弦相似度

余弦相似度和歐氏距離Photo by Markus Winkler on UnsplashMarkus Winkler在Unsplash上拍攝的照片 This is a quick and straight to the point introduction to Euclidean distance and cosine similarity with a focus on NLP.這是對歐氏距離和余弦相似度的快速而直接的介紹&…

bzoj2152 聰聰可可

題目描述 聰聰和可可是兄弟倆,他們倆經常為了一些瑣事打起來,例如家中只剩下最后一根冰棍而兩人都想吃、兩個人都想玩兒電腦(可是他們家只有一臺電腦)……遇到這種問題,一般情況下石頭剪刀布就好了,可是他們…