python链表删除尾部节点_python单链表中如何查找和删除节点?
在之前的文章【python單鏈表中如何插入和輸出節(jié)點?】中給大家介紹了單鏈表是什么,以及如何進(jìn)行添加節(jié)點、輸出所以節(jié)點。下面本篇文章給大家介紹如何查找和刪除節(jié)點,希望對大家有所幫助。
如何從單鏈表中查找節(jié)點?
與大多數(shù)數(shù)據(jù)結(jié)構(gòu)一樣,查找元素是否存在的唯一方法是遍歷整個鏈表。請注意,如果鏈接列表已排序,我們可以使用二進(jìn)制搜索。但是在這里我們將考慮一個未排序的鏈表。
工作原理:用戶給定需要查找的節(jié)點元素,如果我們找到元素,我們返回true,否則返回false;還可以使用計數(shù)器并返回元素的索引(如果存在)。
算法
1、將指針curr設(shè)置為頭部
2、將curr.data與輸入值進(jìn)行比較:
● 如果相等,則返回True
● 否則,轉(zhuǎn)到下一個指針
3、重復(fù)步驟1-2,直到找到元素或滿足鏈接列表的結(jié)尾
實現(xiàn)代碼:def findNode(self,value):
curr = self.head
while curr:
if curr.getData() == value:
return True
curr = curr.getNextNode()
return False
如何從單鏈表中刪除節(jié)點?
從上面的示例中我們知道了如何查找節(jié)點,那么我們可以利用它來刪除節(jié)點。我們可以從用戶那里獲取一個值,在鏈接列表中找到該元素,如果它存在,就將其刪除。
注:讓用戶知道元素是否被成功刪除是非常重要的。因而,當(dāng)刪除成功就返回True,否則返回False;請記住將size屬性減1。
讓我們將要刪除的節(jié)點稱為當(dāng)前節(jié)點。其思想是將前一個節(jié)點的next鏈接到當(dāng)前節(jié)點的next節(jié)點。例如,假設(shè)我們要從給定的鏈接列表中刪除4:原鏈表: H-->3-->4-->5
刪除4后:H-->3-->5
我們需要將3的下一個節(jié)點指向4的下一個節(jié)點,即5。
假設(shè)我們還要刪除3刪除3后:H-->5
注:要在上一個節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點之間建立連接,請務(wù)必跟蹤上一個節(jié)點。
算法
1、有兩個指針:
● CURR - 最初 分給頭
● prev - 最初指向無
2、如果輸入的值與curr的數(shù)據(jù)匹配,檢查prev存在:
● 如果是,則將prev的下一個節(jié)點設(shè)置為curr的下一個節(jié)點
● 如果不是,只需將頭部指向curr的下一個節(jié)點(當(dāng)您要刪除第一個節(jié)點時會發(fā)生這種情況)
● 將size屬性減1
● 返回True
3、如果輸入的值與curr的數(shù)據(jù)不匹配,通過以下方式前往下一個節(jié)點:
● 指向先前的曲線
● 指著CURR到下一個節(jié)點CURR
4、重復(fù)步驟1-3直到鏈表結(jié)束
5、如果到達(dá)鏈接列表的末尾,則返回False,表示鏈接列表中沒有元素與輸入的值匹配
實現(xiàn)代碼:def removeNode(self,value):
prev = None
curr = self.head
while curr:
if curr.getData() == value:
if prev:
prev.setNextNode(curr.getNextNode())
else:
self.head = curr.getNextNode()
return True
prev = curr
curr = curr.getNextNode()
return False
相關(guān)視頻教程推薦:《python3教程》
以上就是本篇文章的全部內(nèi)容,希望能對大家的學(xué)習(xí)有所幫助。更多精彩內(nèi)容大家可以關(guān)注Gxl網(wǎng)相關(guān)教程欄目!!!
總結(jié)
以上是生活随笔為你收集整理的python链表删除尾部节点_python单链表中如何查找和删除节点?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: filter函数的用法_JavaScri
- 下一篇: vb mschart 坐标名称_最强干货