python实现单链表

class Node:
    def __init__(self, value):
        self.val = value
        self.next = None

class Chain(object):
    def __init__(self, head=None):
        self.head = head
        if head:
            self.length = 1
        else:
            self.length = 0

    def print_chain(self):
        if not self.head:
            print('empty chain')
            return
        print('-----')
        node = self.head
        while node:
            print(node.val)
            node = node.next
        print('-----')

    def append_node(self, val):
        item = None
        if isinstance(val, Node):
            item = val
        else: item = Node(val)
        if not self.head:
            self.head = item
        else:
            node = self.head
            while node.next:
                node = node.next
            node.next = item
        self.length += 1
    
    def delete_node(self, index):
        if index < 0: 
            print('invalid index')
            return
        if index >= self.length:
            if self.length == 0: print('empty chain')
            else: print('out of index')
            return
        node = self.head
        pre = self.head
        while node.next and index:
            pre = node
            node = node.next
            index -= 1
        pre.next = node.next
        self.length -= 1
    
    def insert_node(self, index, val):
        if index < 0: 
            print('invalid index')
            return
        if index >= self.length:
            print('out of index, append node')
            self.append_node(val)
            return
        item = None
        if isinstance(val, Node):
            item = val
        else: item = Node(val)
        node = self.head
        pre = self.head
        if index == 0:
            item.next = node
            self.head = item
        else:
            while node.next and index:
                pre = node
                node = node.next
                index -= 1
            pre.next, item.next = item, node
        self.length += 1

def main():
    NodeList = Chain()
    nodes = [1,2,3,4,5]
    for num in nodes:
        NodeList.append_node(num)
    NodeList.print_chain()
    print(NodeList.length)
    NodeList.delete_node(3)
    NodeList.print_chain()
    NodeList.insert_node(0, 1)
    NodeList.print_chain()

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值