dummy node的妙用
1.切记 用了dummy node以后 要head 从dummy开始,把他们连接起来
ListNode* dummy = new ListNode(0);
dummy->next = head;
head = dummy;
2. 用temp然后delete temp 完成删除
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head == NULL)
{
return NULL;
}
ListNode* dummy = new ListNode(0);
dummy->next = head;
head = dummy;
ListNode*temp = NULL;
while(head->next != NULL)
{
if (head->next->val == val)
{
temp = head->next;
head->next = head->next->next;
//head = head->next;
delete temp;
}
else
{
head = head->next;
}
}
return dummy->next;
}
};
3. 其实这题的精髓还在使用 the address of the pointer
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head == nullptr)
{
return head;
}
ListNode** node = &head;
while ((*node) != nullptr)
{
if ((*node)->val == val)
{
ListNode* temp = *node;
//这一步很关键 这个不能和下面的 node = &((*node)->next); 搞反了这个表示double pointer 里面的东西换了 后面的表示double pointer指向换了
*node = (*node)->next;
delete temp;
}
else
node = &((*node)->next);
}
return head;
}
};