链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。
python构造的单链表的功能包括 头插入,尾插入,查找,删除,长度。
#coding:utf8
class Node():
def __init__(self,val,nt = None):
self.value = val
self.next = nt
class singnalList():
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def __str__(self):
newList = self.head
s = ''
while newList:
s +=str(newList.value)
if newList.next:
s+=","
newList = newList.next
return s
def addHead(self,data):
newList = Node(data,None)
if self.head == None:
self.head = newList
self.tail = newList
else:
newList.next = self.head
self.head = newList
self.size += 1
def addTail(self,data):
newList = Node(data,None)
if self.head == None:
self.head = newList
self.tail = newList
else:
self.tail.next = newList
self.tail = newList
self.size += 1
def finds(self,index):
if self.size == 0:
return
if index > self.size:
return
cur = self.head
cnt = 0
while cur :
if cnt == index:
return cur.value
cnt += 1
cur = cur.next
def delets(self,data):
if self.size == 0:
return
cur = self.head
per = None
while cur:
if cur.value == data:
break
per = cur
cur = cur.next
if cur == self.head:
self.head = cur.next
else:
per.next = cur.next
self.size -= 1
def lens(self):
return self.size
if __name__== "__main__":
s = singnalList()
s.addHead(['d','3','5'])
s.addHead(2)
s.addTail(4)
s.addTail(6)
s.addHead(0)
s.addTail(9)
print s
print s.size
print s.finds(2)
s.delets(0)
s.addHead('rt')
print s