http://www.cnblogs.com/yupeng/p/3413800.html 这篇博文是双向非循环的链表的实现 不过我还是在我单链表基础之上修改实现的
代码如下:
#http://www.cnblogs.com/yupeng/p/3413763.html 这是一篇好文章,但我要靠自己来实现单链表
class Node(object):
def __init__(self, data, next = None, pre = None):
self.data = data
self.next = next
self.pre = pre
class ListNode(object):
def __inti__(self):
self.head = None
def ListInit(self, listdata):
self.head = Node(listdata[0])
p = self.head
for i in range(len(listdata) - 1):#创建了一个带头节点的双向循环链表
node = Node(listdata[i+1])
p.next = node
node.pre = p
p = p.next
lastnode = node
lastnode.next = self.head
self.head.pre = lastnode
def getlength(self):
p = self.head
count = 1
p = p.next
while(p != self.head):
p = p.next
count += 1
print('********************************************************************', count)
return count
def is_empty(self):
if self.getlength() == 0:
return True
else:
return False
def ListAddtail(self, value):
node = Node(value)
p = self.head
tail = p.pre
tail.next = node
node.pre = tail
node.next = self.head
self.head.pre = node
def ListAddtop(self, value):
p = self.head
node = Node(value)
top = p #保存第一个节点
self.head = node
node.pre = top.pre
node.pre.next = node
node.next = top
top.pre = node
def ListDelvalue(self, value):
p = self.head
print("p.data = ", p.data)
if (p.data == value):
delnode = p.next
delnodenext = delnode.next
self.head = delnodenext
delnodenext.pre = delnode
print("del first")
else:
p = p.next
while (p != self.head):
print('p.datawhile= ',p.data)
if(p.data == value):
prenode = p.pre
nextnode = p.next
prenode.next = nextnode
nextnode.pre = prenode
break
else:
p = p.next
alist = [1,2,3,4,5]
nodelist = ListNode()
nodelist.ListInit(alist)
lengh = nodelist.getlength()
print(lengh)
nodelist.ListAddtail(123)
lengh = nodelist.getlength()
print(lengh)
nodelist.ListAddtop(90)
lengh = nodelist.getlength()
print(lengh)
nodelist.ListAddtop(330)
lengh = nodelist.getlength()
print(lengh)
nodelist.ListAddtop(90)
lengh = nodelist.getlength()
print(lengh)
p = nodelist.head
print('==============',p.data)
p = p.next
while p != nodelist.head:
print('==============', p.data)
p = p.next
nodelist.ListDelvalue(90)
lengh = nodelist.getlength()
print(lengh)
运行结果如下:符合预期
C:\Users\snowshuang\AppData\Local\Programs\Python\Python37\python.exe C:/Users/snowshuang/PycharmProjects/logging/log1.py
******************************************************************** 5
5
******************************************************************** 6
6
******************************************************************** 7
7
******************************************************************** 8
8
******************************************************************** 9
9
============== 90
============== 330
============== 90
============== 1
============== 2
============== 3
============== 4
============== 5
============== 123
p.data = 90
del first
p.datawhile= 90
******************************************************************** 8
8
Process finished with exit code 0