python链表类的实现,增改插删

 链表作为数据结构的基础,二叉树,队列和栈都可以用它实现,相比数组其优势是可以快捷方便的增改删插,但是缺点是查询不方便,为便于理解写可以对其进行包装测试。

from Node import Node
class LinkList(object):
    def __init__(self):                  #初始实例化的链表类,默认表头为空
        self.head = None
    def init_list(self, data):           
        self.head = Node(None)          
        p = self.head                   

        for i in data:                   #遍历所有的data,以data中元素的数量生产
            p.next = Node(i)             
            p = p.next                   
                                         
    def show(self):
        p = self.head.next             
        while p is not None:           
            print(p.val)                
            p = p.next                  
        print()
    def append(self, item):             #尾端插入数据
        p = self.head                   
        while p.next is not None:       
            p = p.next
        p.next = Node(item)             
    def add(self, item):                #在表头插入数据
        new_head = Node(item)           
        p = self.head.next             
        new_head.next = p              
        self.head.next = new_head      
    def alter(self, index, value):      #改变链表中索引数的具体值
        p = self.head                  
        current_index = 0               #当前索引为0,0索引值即为指向表头
        while p.next is not None and current_index < index:           
            p = p.next                                                   
            current_index += 1
        if p.next == None and current_index is not index:                                         
            raise IndexError("index out of range")
        else:
            p.val = value                                                
    def get_length(self):
        p = self.head
        length = 0
        while p.next is not None:
            p  = p.next
            length += 1
        return length

    def clear(self):  # 链表清空
        p = self.head
        p.next = None
    def insert(self, index, item):
        p = self.head
        current_index = 0
        insert_node = Node(item)
        while p.next is not None and current_index < index -1:
            p = p.next
            current_index += 1
        if p.next == None and current_index is not index - 1:
            raise IndexError("index out of range")
        else:
            temp = p.next
            p.next = insert_node
            insert_node.next = temp

    def delete(self, index):
        p = self.head
        current_index = 0
        while p.next is not None and current_index < index - 1:
            p = p.next
            current_index += 1
        if p.next == None:
            raise IndexError("index out of range")
        else:
            p.next = p.next.next




class Node(object):                      
    def __init__(self, val, next = None):#节点的类对象,初始化中第一个参数是数据,默认next为空
        self.val = val                   #数据保存
        self.next = next





from LinkList import LinkList
link = LinkList()
list = [13,53,21,32,4,1,3,5,2,1,2,3,1]
link.init_list(list)
link.insert(2,1323)
print(link.get_length())


 

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