Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4
and you are given the third node with value 3
, the linked list should become 1 -> 2 -> 4
after calling your function.
Subscribe to see which companies asked this question
因为只能取到删除节点的指针和它后面的指针,不能访问到前面的指针,所以只能将删除节点后面的内容往前覆盖删除节点。过程如下:
用两个指针,一个保存删除节点前的指针,一个保存删除节点的。
class Solution {
public:
void deleteNode(ListNode* node) {
//因为只能取到删除节点的指针和它后面的指针,不能访问到前面的指针,所以只能将删除节点后面的内容往前覆盖删除节点
ListNode* p = node;
ListNode* l = node;
while(p->next != NULL)
{
p->val = p->next->val;
l = p;
p = p->next;
}
if(l != p)
{
l->next = NULL;
delete p;
}else
delete p;
}
};