一、图解
添加头结点比较简单,因为链表的头结点很容易获取。如下图:
向尾部添加节点,一般会想到遍历,但是如果我们能始终跟踪当前链表的尾结点,那么向尾部添加节点就和向头部添加一样简单了。如下图:
二、代码实现
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啦,在线秒回ヾ(◍°∇°◍)ノ゙