python實現連結串列類,為後續刷leetcode準備
阿新 • • 發佈:2021-01-06
技術標籤:# python實現leetcode之連結串列篇python連結串列資料結構leetcode
文章目錄
前言
由於LeetCode關於連結串列方面的題目比較抽象,讀者並不能感性的感知連結串列。因此,本文實現一個連結串列類,後續刷的leetcode都會繼承該類。方便讀者理解連結串列幹啥了。
廢話不說,上code
# -*- coding: utf-8 -*-
# ======================================================
# @Time : 2021/01/04
# @Author : lele wu
# @Email : [email protected]
# @File : lianbiao.py
# @Comment: python實現連結串列
# ======================================================
'''
連結串列組成基礎元素就是 節點:因此,需要實現一個節點類的模具。
這個類屬性包括:資料域和指標域。
同時還需實現 讀取資料域和讀取指標域的方法。
還需設定 資料域 和 設定 指標域的方法。
'''
class Node(object):
def __init__(self,initdata) :
self.data = initdata
self.next = None # 初始指標域為空
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
'''
在有了節點類的基礎上,需要建立一個連結串列類。
屬性: 頭結點
方法: 增查刪節點 以及 連結串列長度
'''
class lianbiao(object):
def __init__(self):
self.head = None # 頭結點指向空
def add(self,item): # 增加一個節點
temp = Node(item) # 新建一個類節點
temp.setNext(self.head) # 讓新節點也指向 head 指向 的節點
self.head = temp # 令 head 指向當前類節點
def length(self): # 統計出節點數量即可
current = self.head # 記得儲存下頭結點
count = 0
while current != None: # 只要頭結點為空,則繼續迴圈
count +=1
current = current.getNext()
return count
def search(self,value): # 查詢連結串列中是否有這個值,返回一個bool
current = self.head # 儲存頭結點
while current != None:
if current.getData() == value:
return True
current = current.getNext()
return None
def remove(self,value): # 刪除連結串列中某個節點,
current = self.head
previous = None # 初始值
found = False
while not found: # 只要沒找到待刪除的值
if current.getData() == value:
found = True
else:
previous = current # 若沒找到,則向前挪動
current = current.getNext()
if previous == None: # 在找到待刪除節點後,若刪除的是頭結點
self.head = current.getNext() # 則直接將頭指標指向後一個節點即可
else: # 若刪除非頭結點,則直接指向後一個即可
previous.setNext(current.getNext())
def show(self): # 迴圈列印連結串列中元素
current = self.head
while current != None:
value = current.getData()
current = current.getNext()
yield value
if __name__ == '__main__':
mylb = lianbiao()
mylb.add(9)
mylb.add(1)
mylb.add(5)
mylb.add(4) # 例項化一個四個節點的連結串列 [4,5,1,9],連結串列是倒序存放到!!
mylb_ele = [ele for ele in mylb.show()]
print('我的連結串列中元素為:',mylb_ele)
簡單介紹下:就是實現了一個連結串列類,裡面包含了 新增元素add,返回連結串列長度length 以及 移除指定元素remove 和顯示連結串列元素show 的方法。
總結
後續刷的leetcode題目都會繼承該類。