237-e-Delete Node in a Linked List

删除链表的指定节点,但只给你要删除的节点,没有给链表头结点。如果不是看到是easy题,我可能会觉得很难:上一个节点指针没给啊怎么删除啊。后来结合难度再一想,难道是要移动节点的值么,就像数组前移那样。照着这个想法没几分钟搞出来一提交,竟然ac了。这...有意义吗?leet的题目应该都是要转弯的,虽然这种土方法能ac但其实毫无意义。果然网上稍微搜了下,可以将要删除的节点伪装成next,然后将next删除就行了。虽然没给上一个节点,但我们可以将下一个节点扯到本节点上,这样一来只要修改2个node就行,跟传统删除比起来就像是前删和后删吧。

土方法:

//-------------------------------------------- //只给了要删除的节点,没有给链表头节点
void deleteNode(struct ListNode* node) {
    if (node == NULL || node->next == NULL)
        return;
    struct ListNode *tmp = node;
    while (tmp->next->next != NULL) {
        tmp->val = tmp->next->val;
        tmp = tmp->next;
    }
    tmp->val = tmp->next->val;
    tmp->next = NULL;
    free(tmp->next);
}

修改后的方法:

void fix_deleteNode(struct ListNode *node) {
    if (node == NULL || node->next == NULL)
        return;
    struct ListNode *del = node->next;
    node->val = del->val;
    node->next = del->next;
    free(del);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值