删除链表中等于给定值val
的所有节点。
样例
给出链表 1->2->3->3->4->5->3
, 和 val = 3
, 你需要返回删除3之后的链表:1->2->4->5
。
题目分析:
由于题目所给节点是无空头节点的单向链表,所以需要额外考虑删除头节点的问题,这样写的代码并不简洁。所以这里设立一个dummy头节点连接上原链表的头,这样就很好的解决了头节点删除的问题。
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: a ListNode
* @param val: An integer
* @return: a ListNode
*/
ListNode * removeElements(ListNode * head, int val)
{
// write your code here
ListNode * dummy = new ListNode(0);
dummy->next = head;
ListNode * cur = dummy;
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 = dummy->next;
delete dummy;
return retNode;
}
};