文章目录
- 1.题目
- 2.题解
- 3.收获
- 基本操作:
- 1.插入操作
- 2.删除操作
- 3.导航操作
- 4.高级操作
1.题目
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 – head = [4,5,1,9],它可以表示为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPE3KSoT-1576636480988)(D:\用户\gaoguofeng\AppData\Roaming\Typora\typora-user-images\1576636096800.png)]
示例1:
输入: head = [4, 5, 1, 9], node = 5
输出: [4, 1, 9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例2:
输入: head = [4, 5, 1, 9], node = 1
输出: [4, 5, 9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
2.题解
从链表里删除一个节点 node
的最常见方法是修改之前节点的 next
指针,使其指向之后的节点。
因为,我们无法访问我们想要删除的节点 之前 的节点,我们始终不能修改该节点的 next 指针。相反,我们必须将想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点。
因为我们知道要删除的节点不是列表的末尾,所以我们可以保证这种方法是可行的。
在编写代码之前需要约定节点结构:
// Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
3.收获
链表是通过链接连接在一起的数据结构的一个序列。
链表是数组之后第二种最常用的数据结构。
- Link − 链表中的每个链路可以存储数据称为一个元素。
- Next − 链表的每个链接包含一个链接到下一个被称为下一个。
- LinkedList − LinkedList 包含连接链接到名为 First 的第一个环节。
基本操作:
1.插入操作
插入是三个步骤的过程 -
- 使用提供的数据创建一个新的连接。
- 指向新建链接到旧的第一个链接。
- 第一个链接指向到这个新链接。
2.删除操作
删除是两个步骤过程
- 找第一个链接指向作为临时链路相连。
- 第一个链接指向到临时链接的下一个链接。
3.导航操作
导航是一个递归步骤的过程,是许多操作的基础,如:搜索,删除等
- 获取指向的第一个链接是当前链接的链接。
- 检查如果当前链接不为空则显示它。
- 指向当前链接到下一个链接,并移动到上面的步骤。
4.高级操作
- 排序 − 排序基于一个特定列表上的顺序的
- 反转 − 反转链表