Python实现向链表头部和尾部添加节点(复杂度都是O(1))

一、图解

添加头结点比较简单,因为链表的头结点很容易获取。如下图:

Python实现向链表头部和尾部添加节点(复杂度都是O(1))_第1张图片

向尾部添加节点,一般会想到遍历,但是如果我们能始终跟踪当前链表的尾结点,那么向尾部添加节点就和向头部添加一样简单了。如下图:

Python实现向链表头部和尾部添加节点(复杂度都是O(1))_第2张图片 

二、代码实现

class Node:
    '''节点类'''
    def __init__(self,val):
        '''初始化方法
        :参数 val:本节点的数值
        '''
        self.val = val
        self.next = None

class UnorderedList:
    '''单向链表'''
    def __init__(self):
        # 头结点
        self.head = None
        # 尾结点(这是保证时间复杂度为O(1)的关键)
        # 因为始终实时跟踪尾结点,所以不需要遍历
        self.tail = None

    def add(self,val):
        '''这是向链表头部添加节点的方法'''
        temp = Node(val)
        temp.next = self.head
        self.head = temp
        # 如果链表是空的,表示这是第一个添加的节点
        # 那么它就应该是尾结点
        if self.tail is None:
            self.tail = self.head
    
    def append(self,val):
        '''这是向链表的尾部添加节点的方法'''
        # 如果现在链表还是空的
        # 那么append和add做的事情是一样的,所以直接调用add就行了
        if self.tail is None:
            self.add(val)
        # 如果当前链表不为空
        # 那么就把新节点拼接到链表的末尾
        else:
            self.tail.next = Node(val)
            self.tail = self.tail.next

 

 

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

 

你可能感兴趣的:(Python学习,Python,链表,头结点,尾结点,复杂度)