力扣:探索初级算法——链表篇——删除链表中的节点删除链表中的节点---详细题解

删除链表中的节点


1- 题目:

删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

现有一个链表 – head = [4,5,1,9],它可以表示为:
在这里插入图片描述
示例 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- 算法思路:

c语言代码:

class Solution {
public:
    void deleteNode(ListNode* node) {
        *node = *(node->next);
    }
};

参考链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/chuan-tong-cyu-yan-lian-biao-yu-mian-xiang-dui-xia/

注意: 这个题目意思是我们只知道要删除的节点node,其他信息都不知道,也就是不知道node节点的上一个节点————从链表中删除一个节点node 的最常见法 是 修改 前一个节点的 next 指针,使其指向之后的节点(如下图),所以我们不能用这个方法!!
力扣:探索初级算法——链表篇——删除链表中的节点删除链表中的节点---详细题解_第1张图片

思路:

C语言中,用指针和结构体来表示链表——这意味着 node 和 它前一个节点的next 指向了内存中的 同一地址——把node的地址作修改,前一个节点的 next也同时被修改了————也就是 直接把node后一个节点赋值给node就行了:*node = *(node->next);

你可能感兴趣的:(#,力扣刷题笔记,链表,算法,数据结构)