单链表

结点的组成

  • 键值
  • 指向下一结点的指针

单链表使用的API

#时间复杂度中有关对尾部操作的函数的时间复杂度粗体为有尾部的情况

API说明时间复杂度
PushFront(key)在链表首部插入元素O(1)
key TopFront()key返回链表首部元素O(1)
PopFront()删除链表首部元素O(1)
PushBack(key)在链表尾部添加元素O(n)/O(1)
key TopBack()返回链表尾部元素O(n)/O(1)
PopBack()删除链表尾部元素O(n)
Boolean Find(key)判断key元素是否在链表中O(n)
Erase(key)从链表中删除key元素O(n)
Boolean Empty()判断链表是否为空O(1)
AddBefore(Node, key)在Node结点之前插入元素O(n)
AddAfter(Node, key)在Node结点之后插入元素O(n)

伪代码实现

链表添加元素操作:添加元素之后要根据初始链表是否为空来更改头指针或者尾指针
链表删除元素:删除之前先判断链表是否为空,在判断删除之后链表是否为空来修改指针

PushFront(key)
PushFront(key):
    node <--- new node  #创建新结点
    node.key <--- key   #修改键值
    node.next <--- head #更新头指针
    if tail = nil:      #判断初始链表是否为空
        tail <--- head
PopFront()
if head <--- nil        #判断链表是否为空
    ERROR:empty list
    head <--- head.next #修改头指针指向下一个指针
if head = nil           #判断删除后链表是否为空
   tail <--- nil        #若为空则更改尾指针
PushBack(key)
PushBack(key):
    node <--- new node    #创建新结点
    node.key <--- key     #修改键值
    node.next <--- nil    #修改指针
    if tail = nil         #若链表为空
        head <--- tail <--- node
    else                  #若链表不为空,修改尾指针
        tail.next <--- node
        tail <--- node
PopBack()
if head = nil
    ERROR:empty list
if head = tail
    head <--- tail <--- nil
else
    p <--- head
    while p.next.next != nil
         p <--- p.next
    p.next <--- nil
    tail <--- p
AddAfter(Node ,key)
AddAfter(Node ,key):
    node2 <--- new node
    node2.key <--- key
    node2.next <--- node.next
    node.next <--- node2
    if node = tail
        tail <--- node2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值