用python實現單鏈表的基本操作

2021-09-28 21:14:41 字數 4061 閱讀 9902

#!usr/bin/env python  

#-*- coding:utf-8 _*

"""

@author: yaotianlong

@file: linklist.py

@time: 2019/10/22

"""class

listnode

:"""單鏈表結點"""

def__init__

(self, data,

next

=none):

self.data = data

self.

next

=next

class

linklist

:"""

單鏈表基本操作:

- 建立鍊錶

- 列印鍊錶

- 鍊錶總長度

- 判斷鍊錶是否為空

- 在鍊錶末尾追加元素item

- 在index位置前插入元素item

- 刪除index位置上的元素

"""def__init__

(self)

: self.head =

none

# self.head為頭結點

defcreate

(self, data)

:"""

建立鍊錶

:param data: list, 如:[1,2,3]

:return:

"""ifnot

isinstance

(data,

list)or

len(data)==0

:# 特殊判斷:不是列表或者列表為空,退出程式

return

self.head = listnode(data[0]

)# 建立頭結點

p = self.head # 指標p指向頭結點,p的型別為none

for i in data[1:

]:# 在頭結點後邊依次插入列表剩餘結點

p.next

= listnode(i)

p = p.

next

defprint

(self)

:"""

列印鍊錶,以空格分隔,末尾換行

:return:

"""p = self.head

while p:

# 遍歷鍊錶,列印結點值

print

(p.data, end=

" ")

p = p.

next

print()

deflen

(self)

:"""

鍊錶長度

:return: len

"""p = self.head

len=0

while p:

# 遍歷鍊錶,統計結點個數

len+=

1 p = p.

next

return

lendef

is_empty

(self)

:"""

判斷鍊錶是否為空

:return: true or false

"""return

true

if self.

len()==

0else

false

def(self, item)

:"""

:param item: 追加元素的值

:return:

"""p = self.head

while p.

next

: p = p.

next

# 找到末尾位置

p.next

= listnode(item)

# 插入元素

definsert

(self, index, item)

:"""

在鍊錶index位置之前插入元素item, 如:[1,2,3] =>insert(1,4)=> [1,4,2,3]

:param index: 索引,從0開始

:param item: 元素的值

:return:

"""if index > self.

len(

)or index <0:

# 特殊判斷,不在列表範圍,退出程式

return

if index ==0:

# 在第乙個位置插入

self.head = listnode(item, self.head)

return

p = self.head

n =0while n <

(index-1)

: p = p.

next

n +=

1# 找到插入位置

if index == self.

len():

p.next

= listnode(item)

# 在最後乙個位置插入

else

: p.

next

= listnode(item, p.

next

)# 在中間位置插入

defdelete

(self, index)

:"""

刪除鍊錶index位置上的元素, 如:[1,2,3] =>delete(1)=> [1,3]

:param index: 索引,從0開始

:return:

"""if index > self.

len(

)or index <0:

# 特殊判斷,不在列表範圍,退出程式

return

if index ==0:

# 在第乙個位置插入

self.head = self.head.

next

# 跳過,刪除元素

else

: p = self.head

n =0while n <

(index-1)

: p = p.

next

n +=

1# 找到刪除位置

p.next

= p.

next

.next

# 刪除元素

if __name__ ==

"__main__"

: a = linklist(

) a.create([1

,2,4

,3,8

,9])

a.print()

print

("len:"

, a.

len())

print

("head data:"

, a.head.data)

print

("linklist not none"

ifnot a.is_empty(

)else

"linklist is none")20

) a.

print()

a.insert(0,

30)a.

print()

a.delete(a.

len()-

1)a.

print

()

輸出結果:

c:\software\anaconda3\envs\tf_gpu\python.exe d:

/pycharmprojects/datastruct/linklist.py12

4389

len:

6head data:

1linklist not none12

4389

203012

4389

203012

38920

process finished with exit code 0

python用單鏈表實現棧

class lnode 節點的類 def init self,x self.data x self.next none class mystack 用鍊錶實現棧 def init self self.data none self.next none 判斷棧是否為空 def isempty self ...

單鏈表的基本實現

按照自己的喜好和風格總結了下,ps.到底是節點還是結點呢,好糾結 1.節點類 templatestruct node 2.鍊錶的建立 templatenode createlist 用這種方式呼叫createlist 意外收穫 pcurr phead phead phead next delete ...

用單鏈表實現佇列

規則 先進先出,後進後出 第一步 先初始化單鏈表結構。宣告兩個指標,乙個head指標指向頭部結點,乙個last指標指向尾部結點。初始化單鏈表時,頭部head指標和尾部last指標是重合的。用單鏈表實現佇列 author ouyangjun public class singlechaintableq...