解法1:用栈变量做辅助头节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head == NULL)
return NULL;
ListNode newHead(0);
ListNode *ptr = &newHead, *tmp;
ptr->next = head;
while (ptr->next) {
if (ptr->next->val == val) {
tmp = ptr->next;
ptr->next = tmp->next;
delete tmp;
} else {
ptr = ptr->next;
}
}
return newHead.next; //是.不是->
}
};
注意涉及到newHead时,是用.而不是->。最后无须释放节点。
解法2:用堆变量做辅助头节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head == NULL)
return NULL;
ListNode* newHead = new ListNode(0);
ListNode *ptr = newHead, *tmp;
ptr->next = head;
while (ptr->next) {
if (ptr->next->val == val) {
tmp = ptr->next;
ptr->next = tmp->next;
delete tmp;
} else {
ptr = ptr->next;
}
}
ptr = newHead->next;
delete newHead;
return ptr;
}
};
注意释放申请的空间。