算法(C++)链表

链表时通过指针串联在一起的线性结构,每一个节点由两个部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针),最后一个节点的指针指向NULL(空指针)。

链表的类型:单链表、双链表、循环链表

链表的存储方式:

数组在内存中是连续分布的,但链表在内存中不是连续分布的。链表通过指针域的指针来链接内存中各个节点的。所以链表中的节点在内存中不是连续分布的,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。

链表节点的C++定义方式:

 链表的添加和删除节点的时间复杂度都是O(1),但是删除和添加某个节点的前提是找到操作节点的前一个节点,而查找前一个节点的时间复杂度是O(n)。

插入\删除(时间复杂度)查找(时间复杂度)
数组O(n)O(1)
链表O(1)O(n)

移除链表元素

在链表中删除指定的元素

注意:头节点的删除和非头节点的删除不同

法一:

 法二:

添加虚拟头节点

 设计链表

设计一个链表,实现6个接口:

获取链表的第index个节点的数值

在链表的最前面插入一个节点

在链表的最后面插入一个节点

在链表的第index个节点前面插入一个节点

删除链表的第index个节点

打印当前的链表

 反转链表

反转一个单链表。要求不能申请额外的内存空间。

法一:双指针法

法二:递归法

删除倒数第n个节点

 删除链表的倒数第n个节点(n从1开始)。

环形链表

判断一个链表是否环形,如果有环,则找到入环的第一个节点,如果无环,则返回null。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值