文章目录

  • 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 指针,使其指向之后的节点。

python删除链表结点 删除链表中的一个结点_链表

因为,我们无法访问我们想要删除的节点 之前 的节点,我们始终不能修改该节点的 next 指针。相反,我们必须将想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点。

python删除链表结点 删除链表中的一个结点_链表_02


因为我们知道要删除的节点不是列表的末尾,所以我们可以保证这种方法是可行的。

在编写代码之前需要约定节点结构:

// 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.插入操作

插入是三个步骤的过程 -

  • 使用提供的数据创建一个新的连接。
  • 指向新建链接到旧的第一个链接。
  • 第一个链接指向到这个新链接。

python删除链表结点 删除链表中的一个结点_链表_03

2.删除操作

删除是两个步骤过程

  • 找第一个链接指向作为临时链路相连。
  • 第一个链接指向到临时链接的下一个链接。
3.导航操作

导航是一个递归步骤的过程,是许多操作的基础,如:搜索,删除等

  • 获取指向的第一个链接是当前链接的链接。
  • 检查如果当前链接不为空则显示它。
  • 指向当前链接到下一个链接,并移动到上面的步骤。
4.高级操作
  • 排序 − 排序基于一个特定列表上的顺序的
  • 反转 − 反转链表