【leetcode】237_链表删除当前结点C语言实现

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

由于函数参数只给定要求被删除的节点,所以我们可以这样想:

如何让自己在世界上消失,但又不死? —— 将自己完全变成另一个人,再杀了那个人就行了。

以上摘自leetcode评论区
翻译过来便是:

node这个节点就是需要删除的节点;之前我们可以用head->next->val去判断下一个是否是删除的节点,然后head->next=head->next->next,这题可以用把 node下一节点复制到node,把下一节点跳过!

注意删除的结点不为末尾结点!!!
由此我们可以这样写:

void deleteNode(struct ListNode* node) {
    node->val=node->next->val;
    struct ListNode *temp;
    temp=node->next;
    node->next=node->next->next;

    free(temp);
    
}

附上自己测试时用的完整代码

#include<stdio.h>
#include<stdlib.h>
struct ListNode{
    int val;
    struct ListNode* next;
};

void deleteNode(struct ListNode* node) {
    node->val=node->next->val;
    struct ListNode *temp;
    temp=node->next;
    node->next=node->next->next;

    free(temp);
    
}
void Print(struct ListNode *head)
{
    while(head)
    {
        printf("%d ",head->val);
        head=head->next;
    }
}
struct ListNode* gen()
{
    struct ListNode *head,*end,*node;
    head=(struct ListNode*)malloc(sizeof(struct ListNode));
    end=head;
    node=head;
    int num;
    scanf("%d",&num);
    while(num!=-1)
    {
       node=(struct ListNode*)malloc(sizeof(struct ListNode));
       node->val = num;
       end->next = node;
       end=node;

       scanf("%d",&num);

    }
    end->next = NULL;

    return head->next;
}
int main()
{
    struct ListNode *head=gen();
    deleteNode(head->next);
    Print(head);

    
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值