【python3数据结构】LinkList链表实现

# -*- coding: utf-8 -*-

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


class LinkedList(object):
    def __init__(self):
        self.head = Node() # dummy node
        self.len = 0

    def get_first(self):
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        return self.head.next
    def get_last(self):
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        node = self.head
        while node.next != None:
            node = node.next
        return node

    def add_first(self, value):
        node = Node(val=value)
        node.next = self.head.next
        self.head.next = node
        self.len += 1

    def add_last(self, value):
        new_node = Node(val=value)
        now_node = self.head
        while now_node.next != None:
            now_node = now_node.next
        now_node.next = new_node
        self.len += 1

    def remove_first(self):
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        remove_value = self.head.next.val
        self.head.next = self.head.next.next
        self.len -= 1
        return remove_value

    def remove_last(self):
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        node = self.head.next
        prev = self.head
        while node.next != None:
            prev = node
            node = node.next
        remove_value = node.val
        prev.next = None
        self.len -= 1
        return remove_value

    def insert_at(self, value, index):
        if index < 0 or index > self.len:
            raise Exception('index bigger than LinkedList length')
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        new_node = Node(val=value)
        node = self.head
        for i in range(index):
            node = node.next
        new_node.next = node.next
        node.next = new_node
        self.len += 1

    def remove_at(self, index):
        if index < 0 or index > self.len:
            raise Exception('index bigger than LinkedList length')
        if not self.head.next:
            raise Exception('LinkedList is Empty')
        node = self.head
        for i in range(index):
            node = node.next
        remove_value = node.next.val
        node.next = node.next.next
        return remove_value

    def print_list(self):
        node = self.head.next
        while node.next != None:
            print(node.val, end=' ')
            node = node.next
        print(node.val, end=' ')
        print()

if __name__ == '__main__':
    ll = LinkedList()
    ll.add_first(10)
    ll.add_first(12)
    ll.add_first(13)
    ll.add_last(1)
    ll.add_last(5)
    ll.add_last(7)
    ll.print_list()
    print('remove first value: ', ll.remove_first())
    ll.print_list()
    print('remove last value: ', ll.remove_last())
    ll.print_list()
    ll.insert_at(88, 2)
    ll.print_list()
    print('remove value: ', ll.remove_at(2))
    ll.print_list()

    print(ll.get_first().val)
    print(ll.get_last().val)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值