C++解OJ题--删除链表中的节点(不要怀疑,这就是一个脑筋急转弯)

  今天这道OJ题,初看,题目怕是出错了吧!惯性思维。


原题如下:

在这里插入图片描述
  请编写一个函数,用于删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问要被删除的节点 。
  题目数据保证需要删除的节点不是末尾节点 。

分析:
  我们平常想的是要删除一个结点,不应该要知道它的前驱结点嘛,这样好修改它的next域的信息,但是这好像不现实。
  这题要表达的想法是:删除结点,不一定是删除该位置的结点,我们只需要改变当前位置结点的信息,让其转换到后面的结点进行删除,直接来看下面的例子,大家都能懂系列。
在这里插入图片描述

  就这样草草的结束了,来看代码!


代码如下:

class Solution {
public:
    void deleteNode(ListNode* node) {
        ListNode*nextNode=node->next;//用于保存下一个节点
        while(nextNode->next!=NULL)
        {
            node->val=nextNode->val;
            node=nextNode;
            nextNode=nextNode->next;
        }
        node->val=nextNode->val;
        node->next=NULL;
        delete nextNode;
    }
};

   也看了一下评论区的大神代码,但是我不能理解为什么*node=*(node->next)就可以搞定,一行代码就解决了这道OJ题。求教一下大家。

   我是“老胡”,感谢阅读!!❤️ ❤️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值