题目描述
删除链表中等于给定值val的所有节点。
测试样例
给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。
- 1
解题思路
这道题虽然被归为入门题,但是坑很多。上次去深信服面试就问道了这道题。
要注意两点:
1、要删除的元素可能不止一个。
2、要删除的可能是头节点。
明白了这个,就好做了。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), 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
if (head == NULL) return NULL;
while (head != NULL && head->val == val) head = head->next;
ListNode *cur = head;
while (cur !=NULL && cur->next !=NULL){
if (cur->next->val == val){
cur->next = cur->next->next;
}
else
cur = cur->next;
}
return head;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32