2025.3.5学习笔记---链表

力扣开始刷链表的题目.

首先接触移除链表元素的题:

题目链接:203. 移除链表元素 - 力扣(LeetCode)

  移除链表元素只需要将需要将需要取到删除节点(例如取名为cur)上一节点 (例如取名为pre),将pre.next指向cur.next即完成删除cur的功能。

在实现代码中,因为头节点(headnode)是找不到上一节点的,所以需要单独判断while(head == null)以及while(head != null && head.val == val)。

这里之所以用while循环而不用if判断语句是因为如果头节点及之后还有很多节点的值都满足val就都需要删除操作,而if语句只会判断一次。

在头节点判断条件成立时,令head=head.next,即完成头节点的删除操作。

接下来再进行剩余节点的判断操作。这里注意定义一个临时指针变量cur=head,防止对头节点直接进行操作。cur是找不到上一个节点的,但是cur.next可以,所以我们首先来判断cur以及cur.next是否为空,不为空再判断cur.next.val是否等于目标值,如果相等,则令cur.next = cur.next.next来删除cur.next位置的数据,如果不相等,则进行指针移动操作,cur=cur.next。

上述是普通方法,需要单独考虑头节点问题,后续讲述虚拟头节点方法:

虚拟头节点即先定义一个新linklist的节点对象dummy,然后,将dummy.next = head即完成为该链表添加一个新的头节点操作。然后只需要判断cur以及cur.next是否为空,然后再进行判断是否满足等于val值条件,再进行和上述普通方法一样的条件。

然后是设计链表的题目

题目链接:

707. 设计链表 - 力扣(LeetCode)

 一定要注意在链表类中要定义链表节点:

  get函数主要思路:首先判断index是否有效,如果无效直接return -1;如果有效定义一个for循环,最大循环数小于等于index,在循环体内用curr=cur.next完成指针的移动,直到移到index(最后一次循环)退出循环后,return cur.val;

  addAtHead函数主要思路:定义需要插入val值节点为newnode,令newnode.next=cur.next; cur.next = newnode;

  addAtTail函数主要思路:判断当cur.next != null,一直让cur往后移,直到不符合条件退出循环,再让cur.next = newNode;

 addAtIndex主要思路:首先判断index是否有效,如果无效直接return ,如果有效定义一个for循环,最大循环数小于index,在循环体内用curr=curr.next完成指针的移动,直到移到index(最后一次循环)退出循环后,令newNode.next = curr.next;curr.next = newNode;完成插入。

delete也是一样的思路。

总体而言,链表的操作主要靠指针的移动,以及某对象next赋值来改变,必要时画链表图。

以上内容来源于代码随想录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值