用Python實現鍊錶Linklist

2022-09-20 04:39:14 字數 2877 閱讀 3596

在leetcode上面試著用python解題,但是遇到鍊錶、二叉樹什麼的,python就用不溜。在網上看了一些資料。

完整的實現過程如下:

class node:

next = none

data = none

def __init__(self, nodedata):

self.data = nodedata

# 乙個鍊錶資料結構,包括乙個 根節點root 還有 鍊錶大小size

class linklist:

root = none

size = 0;

def __init__(self):

self.root = none

size = 0

def __del__(self):

"刪除鍊錶(清空節點)"

if self.root is none:

return

curnode = self.root

while curnode.next is not none:

tempnode = curnode

curnode = curnode.next

tempnode = none

curnode = none

# insert a new node to the linklist

def insert(self, newdata):

"新增節點"

newnode = node(newdata) # 每次都新建乙個node(新位址)

if self.root is none:

self.root = newnode

self.size = 1

return

tempnode = self.root

while tempnode.next is not none:

tempnode = tempnode.next

tempnode.next = newnode

self.size += 1

# def get data of position pos

def getdata(self, pos):

if pos >= self.size or pos < 0:

return none

else:

tempnode = self.root

for i in range(0, pos):

tempnode = tempnode.next

return tempnode.data

# remove a certain node

def remove(self, thedata):

curnode = self.root

if curnode is none:

return

if self.size == 1 and curnode.data == thedata:

curnode.data = none

curnode = none

self.size -= 1

return

elif curnode.data == thedata: # 第乙個節點就是需要刪除的節點

self.root = curnode.next

curnode = none

self.size -= 1

return

while curnode.next is not none:

if curnode.next.data == thedata:

tempnode = curnode.next

curnode.next = curnode.next.next

tempnode = none # remove the node,but curnode stays still

self.size -= 1

else:

curnode = curnode.next

# get root node

def getroot(self):

return self.root

# def get size

def getsize(self):

return self.size

# print the data of the linklist

def print(self):

tempnode = self.root

while tempnode is not none:

print tempnode.data,

tempnode = tempnode.next

if __name__ == '__main__':

print ("start main()")

mylist = linklist() # 乙個linklist 就是乙個完整的鍊錶; node 為鍊錶的節點

print mylist.getsize()

for i in range(1, 10):

mylist.insert(i)

print ('輸出該單鏈表:')

mylist.print()

print ("\n mylist 的 size:%s" % mylist.getsize())

print ("---------------------------------\n刪除1號索引的元素:")

mylist.remove(6)

mylist.remove(1)

print ("輸出刪除1號索引後鍊錶的元素:\n")

mylist.print()

print ("\n刪除後的元素個數:%s" % mylist.getsize())

參考:

鍊錶《Link》

鍊錶 link 使用線性表的不足之處 1.如果長度不確定,使用線性表時,會很不方便,運算效率比較低。3.當為乙個線性表分配儲存空間時,如果儲存空間滿的話,再次插入資料的話,會造成 上溢 錯誤。這上面的三個不足,在鍊錶中都可以得到解決。在鏈式儲存方式中,要求每個節點由兩部分組成 一部分用於存放資料元素...

link 鍊錶操作

link 鍊錶結構 之前是操作字串string 鍊錶 頭元素,後面乙個乙個的指向後面的元素。redis內部實現了鍊錶的結構。鍊錶的頭尾,從乙個元素找到另外的元素。鍊錶的名字也是乙個key。flushdb 則資料全部沒了。lpush keyvalue 作用 把值插入到鏈結頭部 r1 0 lpush c...

用python實現鍊錶操作

下面的方式涉及到 初始化鍊錶 鍊錶長度 插入 刪除 新增 查詢 逆序 class node object def init self,data,p 0 self.data data self.next p class linklist object def init self self.head 0...