单链表的Python实现

来源:互联网 发布:矩阵通解 编辑:程序博客网 时间:2024/04/30 04:07

今天写了一个用Python实现单链表,基本功能包括:从头插入,从尾插入,查找,删除,构造有限队列的插入等功能。

# -*- coding: utf-8 -*   ##允许中文注释'''单向链表的Python实现L = LinkList()L.addToHead     ##从头节点加入数据L.addToTail     ##从尾节点加入数据L.findTail      ##返回尾节点L.findSize      ##返回链表大小L.delete(data)  ##删除指定节点L.search(index) ##返回指定index的节点L.clear()       ##清空链表author: diudiu'''class Node():    def __init__(self, data = None, next = None):        self.data = data        self.next = next    def __str__(self):        return 'Node [' + str(self.data) + ']'class LinkList():    def __init__(self):        self.head = None        #self.tail = None #也可以设置一个tail,这样就不需要调用findTail()函数去找尾巴了        self.size = 0    def __str__(self):        newNode = self.head        s = ''        while newNode:            s += str(newNode.data)            if newNode.next:                                s += ','            newNode = newNode.next        return s    def addToHead(self, data):        newNode = Node(data, None)        if self.head == None:            self.head = newNode        else:            newNode.next = self.head            self.head = newNode        self.size += 1            def addToTail(self, data):        newNode = Node(data, None)        if self.head == None:            self.head = newNode        else:            tail = self.findTail()            tail.next = newNode        self.size += 1            def findTail(self):        curNode = self.head ##currentNode = self.head        while curNode.next:            curNode = curNode.next        return curNode                        def findSize(self):        return self.size        def delete(self, data):        if self.size == 0:            print "Can not delete from an empty list"            return        curNode = self.head        preNode = None        while curNode:            if curNode.data == data:                break            else:                preNode = curNode                curNode = curNode.next                        if curNode == self.head:            self.head = self.head.next        elif curNode == None:            print 'Cant find the data you want delete'        else:            preNode.next = curNode.next        curNode = None        self.size -= 1               def insert(self, data):##将构造一个有限队列        newNode = Node(data, None)        if self.size == 0:            self.head = newNode        else:            curNode = self.head            preNode = None            while curNode:                if curNode.data >= data:                    break                else:                    preNode = curNode                    curNode = curNode.next            if curNode == self.head:                newNode.next = self.head                self.head = newNode            else:                                newNode.next = curNode                preNode.next = newNode        self.size += 1                    pass    def search(self, index):        if self.size == 0:            print "the list is empty"            return        if index > self.size:            print "the index is out of boundary"            return        curNode = self.head        cnt = 1        while curNode:            if cnt == index:                return curNode            cnt += 1            curNode = curNode.next    def clear(self):        self.__init__()def test():    L = LinkList()       while 1:        data = raw_input('input data, input "q" to stop: ')        if data == 'q':            break        L.insert(data)            print L        index = raw_input('input the index:')    print L.search(int(index))        while 1:        data = raw_input('delete data, input "q" to stop: ')        if data == 'q':            break        L.delete(data)            print L    if __name__ == "__main__":    test()            


0 0