算法2:用python實現鏈表的正序和反序輸出

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章