203. Remove Linked List Elements
Remove all elements from a linked list of integers that have value val.
Example:
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
题目链接:https://leetcode.com/problems/remove-linked-list-elements/
思路
这题虽简单,涉及到哨兵节点的使用。如果不使用哨兵,则需要额外添加对头节点的处理,还会涉及以下需要考虑的内容:
1.需要删除头节点;
2.一直需要删除头节点;
3.一直删除头节点时需要重新判断是否头为空;
4.头节点删完后开始进入普通节点循环时是否又为空。
因此,加上哨兵节点会方便很多。
注意,在c++删除节点需要手动释放。
!加哨兵节点的原则:如果可能对链任意位置进行操作,且对头指针和中间普通指针的逻辑不一致(需要单独写一段逻辑),那么加哨兵就能避免不一致可能引起的错误。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==NULL) return head;
ListNode *node = new ListNode(0);
node->next = head;
ListNode *pre = node;
while(head!=NULL){
if(head->val == val){
pre->next = head->next;
ListNode *tmp = head;
head = head->next;
delete tmp;
}else{
pre = head;
head = head->next;
}
}
return node->next;
}
};