#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()