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
思路:
思路很简单,记录当前指针的前一个节点,然后val对上的话把前一个节点的next指针指向当前节点的next指针。有几个需要注意的输入:
- 空指针输入,即head就是NULL
- head->val等于val的情况,即删除完后head指针会变化
- 末尾节点要删除的情况
- 删完之后链表变空的情况
《剑指Offer》这书还挺有用的,代码的稳健性很重要。
代码
/**
* 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) {
if(head == NULL)
return head;
ListNode* pNewHead = head;
ListNode* pPrev = NULL;
ListNode* pCurr = head;
while(pCurr != NULL){
if(pCurr->val == val){
if(pPrev == NULL) {//pCurr is the head of linkedlist
pNewHead = pCurr->next;
} else {
pPrev->next = pCurr->next;
}
} else {
pPrev = pCurr;
}
pCurr = pCurr->next;
}
return pNewHead;
}
};