删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9]。  

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

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

示例 2: 输入: head = [4,5,1,9], node = 1 输出: [4,5,9]

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

这题很鸡贼,我一开始没有看懂题目,无脑遍历才发现并没有给出head,只给了一个node节点。

和习惯的那种先找pre节点的思路就很不一样。


常规思路

看了题解就两行代码,蛤蛤。非常规思维。

做法就是做一个拷贝,把node->next的数据域、指针域统统都给node,这样node就变成node->next了,而node的指针域继承了node->next的指针域部分,也就能很顺地接下去了。


两行代码:

node->val=node->next->val;        

node->next=node->next->next;

不过我感觉只是改node的话,node->next虽然没有利用价值了,但也一直在那边没有释放掉啊喂,然后我稍微做了点没用的改动:

ListNode *ptemp=node->next;        

node->val=node->next->val;        

node->next=node->next->next;        

delete ptemp;

这样就安心多了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。