请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。
比如:假设该链表为 1 -> 2 -> 3 -> 4
,给定您的为该链表中值为 3
的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4
。
————————————————————————————————————————————————————
这个题乍一看给的题头,立马呆住了,这玩意怎么做啊。就给个节点,没有前驱,那我怎么连?没有链表,我怎么查???
但是巧妙的地方也在这里。
可以把要删除的节点,用该节点的后面节点进行覆盖,然后删掉后面那个节点就好了。
举个栗子:ABCDE,删除C,我们就先用D占C的位置,变成ABDDE,然后把后面那个D删除,就可以得到ABDE~
思路很巧妙。值得借鉴!
开心的时候就喜欢用很多颜色,怎么滴,被删除2吊打还不许人翻身了???
—————————————————————————————————————————————————————
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
node->val = node->next->val;
node->next = node->next->next;
}
};