#node这是节点类
class Node():
#初始化函数
def __init__(self,value=None,next = None):
self._value = value
self._next = next
#获取节点值函数
def getValue(self):
return self._value
#获取下一个节点函数
def getNext(self):
return self._next
#设置节点值函数
def setValue(self,new_value):
self._value = new_value
#设置节点指向的函数
def setNext(self,new_next):
self._next = new_next
#list这是链表
class LinkedList():
#链表初始化函数
def __init__(self):
self._head = Node()
self._tail = None
self._length = 0
#判断链表是否为空
def isEmpty(self):
return self._head == None
#从头添加节点
def add(self,value):
newNode = Node(value,None)
newNode.setNext(self._head)
self._head = newNode
#在链表尾部添加节点
def append(self,value):
newNode = Node(value)
if self.isEmpty():
self._head = newNode
else:
current = self._head
while current.getNext()!=None:
current = current.getNext()
current.setNext(newNode)
#查看某值是否在链表中
def search(self,value):
current = self._head
foundvalue = False
while current!=None and not foundvalue:
if current.getValue()==value:
foundvalue = True
else:
current = current.getNext()
return foundvalue
#查询某值在链表中的索引号
def index(self,value):
currrent = self._head
count = 0
found = None
while current!=None and not found:
count += 1
if current.getValue()==value:
found = True
else:
current = current.getNext()
if found:
return count
else:
raise ValueError("%s is not in lilnked list"%value)
#从链表中删除某一个值
def remove(self,value):
current = self._head
pre = None
while current!=None:
if current.getValue()==value:
if not pre:
self._head = current.getNext()
else:
pre.setNext(current.getNext())
break
else:
pre = current
current = current.getNext()
#在某一位置插入特定值
def insert(self,pos,value):
if pos<=1:
self.add(value)
elif pos>self.size():
self.append(value)
else:
temp = Node(value)
count = 1
pre = None
current = self._head
while count<pos:
count += 1
pre = current
current = current.getNext()
pre.setNext(temp)
temp.setNext(current)
#定义一个链表
l1 = LinkedList()
#从头部插入一些值
l1.add(5)
l1.add(4)
l1.add(3)
l1.add(2)
l1.add(1)
#输出链表中的值
cur = l1._head
#从前插的时候只有最后一个没有数值,它为原来的头结点(值为None)
#所以输出到最后一个结点的判断条件是:最后一个结点的指向为None
while cur.getNext()!=None:
print(cur.getValue())
cur = cur.getNext()
print("...->L1 over <-.....")
#定义另一个链表
l2 = LinkedList()
#这里是由于后插的时候直接使头结点指向新结点,而非更新头指针的值
l2._head.setValue(5)
l2.append(4)
l2.append(3)
l2.append(2)
l2.append(1)
cur = l2._head
print("...->list L2")
#这里是后插,所以最后一个数据的getNext()属性为空(None)
#因此不能用cur.getNext()!=None来判断链表是否结束
while cur != None:
print(cur.getValue())
cur = cur.getNext()