在C语言中,我们通常通过“指针+结构体”来实现链表,但是在python中并没有指针,所以我们必须考虑其它 的方法。在这里,我们通过定义节点类node,并通过类的嵌套引用来实现链表。node类的定义就像链表中的节点一样,包含两个对象,节点的值(data)和表示指向下一个节点的next。在这里我们通过节点的next对象再次引用类node来实现next指向下一个节点的目标,这样不断嵌套应用,链表也就实现了。代码如下:
__author__ = 'jiangzhiheng'
#coding=utf-8
import copy
class node(): #定义一个节点类
def __init__(self,val,p=0):
self.data = val
self.next = p
class linklist():
def __init__(self):
self.head = 0
def initlist(self,data):
self.head = node(data[0])
p = self.head
for i in data[1:]:
p.next = node(i)
p = p.next
def getlength(self): #获得链表元素的个数
p = self.head
length = 0
while p!=0:
length+=1
p = p.next
return length
def insert(self,item,index):
if index>self.getlength() or index<=0:
print('please enter a valid index')
return
p = self.head
q = node(item)
while (index-1)!=0: #在第index后面插入对象item
index=index-1
p = p.next
post = copy.deepcopy(p.next)
p.next = q
q.next = post
def getitem(self,index):
if index>self.getlength() or index<=0:
print('please enter a valid index')
return
p = self.head
while (index-1)!=0:
index=index-1
p = p.next
return p.data #返回链表第index个对象的值
def remove(self,index):
if index>self.getlength() or index<=0:
print('please enter a valid index')
return
p = self.head
if index == 1:
self.head = p.next
return
while (index-2)!=0: #移除链表中的第index对象
index=index-1
p = p.next
p.next = p.next.next
def search(self,item): #在链表中搜索对象item
p = self.head
i = 1
while p!=0:
if p.data == item:
return i
i+=1
p = p.next
l = linklist()
l.initlist(range(7))
print(l.getlength())
l.insert(10,5)
print(l.getitem(6))
l.remove(5)
print(l.search(5))
i = 1
while i<l.getlength():
print(l.getitem(i),end=',')
i+=1
结果