203.移除链表元素 707.设计链表 206.反转链表

1.链表基础知识点:

单链表:

双链表:

循环链表:

链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理 依靠node进行联系 数组直接是连续的  下标就可以联系了

一个data 一个node(该struct类型指针)添加和删除节点都是控制node的指向

【C++跬步积累】——时间复杂度_时间复杂度c++_PH_modest的博客-CSDN博客

203.移除链表元素

1.自己思路:

就在传参进来的链表里面进行操作 循环结束判断条件为最后一个节点指向不为null 里面匹配val 相等在node->next = node->next->next 但是运行超时

2.题解思路:

第一种情况: 移除头节点

第二种情况:往下移动 但是注意需要释放删除的node

head是链表的第一个节点 将head赋值给cur(浅拷贝) cur再通过遍历(不断的变成下一个节点)

cur = cur->next对链接进行重新排序(注意 此时头节点即head是不可能改变的)cur的作用是遍历重新排序 但是重新排序的头节点还是head不会改变 即保护head node可以返回!!!

虚拟头的方法就是虚拟一个head 虚拟的head指向head 这样就可以再利用cur遍历修改链接(虚拟头节点不变)

第一次写粗心 释放的Node写错

代码完成通过

707.设计链表

思路:

自己思路错误在虚拟头节点的定义 cur作为遍历node 是从头开始的 所以cur = dummyhead->next;即确保了虚拟头节点 也确保了cur从head开始遍历

链表下标Index也从0开始计数

要注意特殊情况!!!

注意 遍历的节点cur 是选择虚拟头节点 还是真正的Head节点

选择虚拟头节点 while(index--)遍历到的为下标index前的节点

可以画图模拟运行或者加上打印函数

206.反转链表

1.自己思路:

用cur遍历到最后 得到最后的节点即为反转的head(但是此时该节点指向为null 没有指向下一节点)但是后续无思路 看到了提示双指针法 继续思考 自己思路想的是再弄一个节点 当作最后输出链表的头节点但是运行超时

2.题解思路:

1.自己思路基础上:

反转在pre和cur中直接进行 但是得保存本来cur->next 因为cur还需要继续向下移动 最后返回pre(因为while循环判断条件 最后cur会变成Null pre变成原先链表的最后一个节点)代码完成通过

2.递归法:

三部曲:1.传入参数

              2.终止条件

              3.进行递归

个人理解 递归就是将while循环分解 代码完成 通过

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值