链表

 
二 移除链表元素
 1 没有头结点
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
    	//删除头结点
		while (head != NULL && head->val == val) {
			ListNode* tmp = head;
			head = head->next;
			delete tmp;
		}
		
		//删除非头结点
		ListNode* cur = head;
		while (cur != NULL && cur->next != NULL) {
			if (cur->next->val == val) {
				ListNode* tmp = cur->next; 
				cur->next = cur->next->next;
				delete tmp;
			} else {
				cur = cur->next;
			}
		}
		return head;   	
    }
};
 
2 带头结点
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
    	ListNode* dummyHead = new ListNode(0);
    	dummyHead->next = head;
    	ListNode* cur = dummyHead;
	//	while (cur != NULL && cur->next != NULL) {  //这个要这样判断是因为头结点也可能是NULL的,但有虚拟头结点的话,虚拟头结点不可能是NULL 
		while(cur->next != NULL) 
		{
			if (cur->next->val == val) {
				ListNode* tmp = cur->next; 
				cur->next = cur->next->next;
				delete tmp;
			} else {
				cur = cur->next;
			}
		}
		head = dummyHead->next;
		delete dummyHead;
		return head;   	
    }
};
                

















