请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- 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;
这样就安心多了。