1、問題描述
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
給定一個單鏈表和一個數值,刪除單鏈表中數據域等於該數值的節點。
2、問題分析
遍歷一次鏈表,找到數據域等於給定數值的鏈表節點,然后刪除之。刪除鏈表的操作,就是被刪除鏈表節點的前驅節點直接指向其后繼節點,在C++ 中還要記得 delete被刪除的鏈表。
為了方便處理head節點,可以人為創建一個新節點,新節點的next指向head。
特例是,輸入為空時,直接返回NULL。
3、代碼
1 ListNode* removeElements(ListNode* head, int val) { 2 3 if(head == NULL) 4 return NULL; 5 6 ListNode FirstNode(0); 7 FirstNode.next = head; 8 9 ListNode* p = &FirstNode; 10 while(p != NULL) 11 { 12 ListNode* tmp = p->next; 13 if(tmp != NULL && tmp->val == val ) 14 { 15 p->next = tmp->next; 16 delete tmp; 17 } 18 else 19 p= p->next; 20 } 21 22 return FirstNode.next; 23 24 25 }