1. 程式人生 > 其它 >python實現連結串列類,為後續刷leetcode準備

python實現連結串列類,為後續刷leetcode準備

技術標籤:# 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題目都會繼承該類。