代码随想录算法训练营day3 |第二章 链表 力扣203.707.206.

学习目标:

理解链表的理论基础完成力扣题目


学习大纲:

  • 链表理论基础

  • 203.移除链表元素

  • 707.设计链表

  • 206.反转链表


学习时间:

1:00-4:00


学习内容:

a.链表理论基础

1.链表类型: 单链表 双链表

单链表:指针域只能指向节点的下一个节点

双链表:两个指针域,一个指向下一个节点一个指向上一个节点

循环列表:链表首位相连

2.链表的存储方式:

链表是通过指针域的指针链接在内存中各个节点,所以链表中的节点在内纯种不是连续分布的。

分配机制取决于操作系统的内存管理。

3.链表的定义:

ListNode* next; 

ListNode* head = new ListNode();

4.链表的操作:

删除节点即讲节点的指针指向改到下一个节点即可

添加节点上一个节点的指针指向添加节点,添加节点的指针指向下一个节点

5.性能分析

 @代码随想录

b.203.移除链表元素

移除给定值val的节点

思路:

当链表中的数等于val的时候,指针指向下一个节点

执行出结果,但是提交报错

代码随想录视频讲解

1.移除头节点的情况

2.移除非头节点的情况

3.虚拟头节点的方法 -> 方法统一(删除所有节点的方法)

思路 :

1.创建一个虚拟头节点 指向头节点

2.链表中所有节点此时为非头节点

3.当next->val = target的时候,指向下下个节点

4.删除虚拟头节点,返回头节点

c. 707设计链表

get(Index):

返回第index个节点的值

思路:

一直指向下一个节点直到指向查找的Index节点返回index的值

addAtHead(val)

插入值为Val的节点作为头节点。

思路:

将新建值为val的节点指向原头节点。

addAtTail

插入值为Val的节点作为尾节点。

思路:

用while遍历,遍历到结尾时将原尾节点指向新节点。

addAtIndex

插入值为Val的节点在index的位置。

思路:

将新建值为val的节点在index的位置插入。

上一个节点指向,此节点指向下一个节点。

deleteAtIndex

删除值为Val的节点在index的位置。

思路:

将index的位置节点删除。

上一个节点指向下下个节点。

代码随想录视频:

1.统一使用虚拟头节点的方式

//即dummyhead

2.链表头节点即n=0

3.遍历链表的时候定义cur节点(遍历过后返回头节点)

//如果直接操作head会改变head

-->cur=dummyhead->next

4.考虑边界问题

5.插入节点时要new node进行插入

6.先指向下一节点,在建立与上一个节点的联系

/*newnode->next = head;

dummyhead->next = new node;*/

7.尾部节点遍历边界(cur->next == null)

8.第n个节点即n--.

9.更新size的大小

。。。自行代码随想录网站扒答案。

这个地方要注意,index>=_size,当等于的时候也是,删完跟大于的时候也是一样的结果。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值