今天这道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题。求教一下大家。
我是“老胡”,感谢阅读!!❤️ ❤️