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
Solution:
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyNode = new ListNode(0);
dummyNode->next = head;
ListNode* cur = dummyNode;
while ( cur->next != NULL ){
if( cur->next->val == val){
ListNode* delNode = cur->next;
cur->next = delNode->next;
delete delNode;
} else
cur = cur->next;
}
ListNode* retNode = dummyNode->next;
delete dummyNode;
return retNode;
}
};
总结: 巧妙的加了一个虚拟头结点,使处理head节点和后面结点没有区别。这个方法还是很常用的,一定要学会!