在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...