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
分析:
思路首先:这个题必须将链表遍历一遍,所以做法很固定,最难不过考虑一下极端情况而已。
/**
* 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) {
ListNode* pPre=NULL;//指向要删除的节点的前一个节点
ListNode* pCur=head;//可能要删除的节点
if(pCur == NULL)//极端情况1:逗你玩,一来就给你空指针
return NULL;
while(pCur && pCur->val==val)//极端情况2:第一个节点(或者一来就是连续的要删除)就是要删除的(目的:为了让head指向未来真正的头结点)
{
pPre=pCur;
head=pCur->next;
pCur=pCur->next;
delete pPre;
pPre=NULL;
}
while(pCur)//正常的删除情况
{
if(pCur->val == val)
{
ListNode* pDelNode=pCur;
pPre->next=pCur->next;
pCur=pCur->next;
delete pDelNode;
pDelNode=NULL;
}else{
pPre=pCur;
pCur=pCur->next;
}
}
return head;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50440484
原作者博客:http://blog.csdn.net/ebowtang
本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895