一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
我的个人博客已创建,欢迎大家持续关注!
一天一道leetcode系列依旧在csdn上继续更新,除此系列以外的文章均迁移至我的个人博客
另外,本系列文章已整理并上传至gitbook,网址:点我进
欢迎转载,转载请注明出处!
(一)题目
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* pre = NULL;
ListNode* p = head;
while(p){
if(p->val==val){//与给定值相等
while(p&&p->val==val) p=p->next;//连续相等的情况
if(pre==NULL) head = p;//如果需要删除头节点,则需要更新头节点
else pre->next = p;
}
else{
pre = p;
p=p->next;
}
}
return head;
}
};