237. 删除链表中的节点

题目

有一个单链表的 head,我们想删除它其中的一个节点 node。

给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

给定节点的值不应该存在于链表中。 链表中的节点数应该减少 1。 node 前面的所有值顺序相同。 node 后面的所有值顺序相同。

示例 1:

输入:head = [4,5,1,9], node = 5

输出:[4,1,9]

解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

难度: 中等

题解

删除链表中的节点的常见方法是定位到待删除的上一个节点,修改上一个节点的next指针,使其指向待删除节点的下一个节点,即可完成删除操作。

本题中,传入的参数node为要被删除的节点,根据题目中无法访问第一个节点head,因此就无法定位到要删除节点的上一个节点。注意到要被删除的节点不是链表的末尾节点,因此node->next不为空。

在给定节点node的情况下,可以通过修改node和node->next的值,将node->next->val赋给node,并删除最后一个节点。

1、将链表中第三个节点的值赋给第二个节点,将第四个节点的值赋个第三个节点,此时链表为

  4->1->9->9

2在保证node下一个节点不为空的情况下删除链表的最后一个节点,此时链表为:

  4->1->9

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {
    while(1){
        node->val=node->next->val;
        if(node->next->next==NULL){
            node->next=NULL;
            break;
        }
        node=node->next;
    }
}
复制代码

 

复杂度分析

-时间复杂度:O(1)

-空间复杂度:O(1)

 

 

 

 

 

 

posted @   一树懒  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示