#Personal Python Data Structure--PPDS#
#!/usr/bin/python#-*- coding: utf-8 -*-
classNode(object):def __init__(self,val,p=0):
self.data=val
self.next=p
self.prev=pclassLinkList(object):def __init__(self):
self.head=0definitlist(self,data):
self.head=Node(data[0])
p=self.headfor i in data[1:]:
node=Node(i)
p.next=node
node.prev=p
p=p.nextdefgetlength(self):
length=0
p=self.headwhile p !=0:
length+=1p=p.nextreturnlengthdefis_empty(self):if self.getlength() ==0:returnTrueelse:returnFalsedefclear(self):
self.head=0defappend(self,item):
q=Node(item)if self.head ==0:
self.head=qelse:
p=self.headwhile p.next !=0:
p=p.next
p.next=q
q.prev=pdefgetitem(self,index):ifself.is_empty():print ('Linklist is empty.')returnj=0
p=self.headwhile p.next != 0 and j
p=p.next
j+=1
if j ==index:returnp.dataelse:print ('target is not exist!')definsert(self,index,item):if self.is_empty() or index < 0 or index >self.getlength():print ('Linklist is empty.')return
if index ==0:
q=Node(item,self.head)
self.head=q
j=0
p=self.head
post=self.headwhile p.next != 0 and j
post=p
p=p.next
j+=1
if index ==j:
q=Node(item,p)
post.next=q
q.prev=post
q.next=p
p.prev=qdefdelete(self,index):if self.is_empty() or index < 0 or index >self.getlength():print ('Linklist is empty.')return
if index ==0:
q=Node(item,self.head)
self.head=q
j=0
p=self.head
post=self.headwhile p.next != 0 and j
post=p
p=p.next
j+=1
if index ==j:
post.next=p.next
p.next.prev=postdefindex(self,value):ifself.is_empty():print ('Linklist is empty.')returni=0
p=self.headwhile p.next != 0 and not p.data ==value:
p=p.next
i+=1
if p.data ==value:returnielse:return -1
if __name__ == '__main__':
l=LinkList()
llist=[7,3,10,4,5,]
l.initlist(llist)print(l.getlength())print(l.is_empty())#l.append(11)
#l.insert(2,100)
print(l.getlength())print(l.getitem(0))for i inrange(l.getlength()):print(l.index(llist[i]))
l.clear()print(l.getlength())