算法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()
 

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