1,题目要求
Remove all elements from a linked list of integers that have value val.
删除给定链表中对应值的节点。
2,题目思路
对于这样的一个问题,只要依次对链表进行遍历即可,设置两个节点来进行跟踪,一个节点cur来读取目前遍历的节点,另一个用来记录上一个节点。
需要注意的是,对于第一个符合条件的节点,要单独的进行判断处理。
对于这样的问题,还可以用递归的办法来解决。
3,程序源码
方法1:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* pre = NULL;
ListNode* cur = head;
while(cur!= NULL)
{
if(cur->val == val) {
if (pre == NULL) { //第一个节点
head = head->next;
}
else {
pre->next = cur->next;
}
}
else {
pre = cur;
}
cur = cur->next;
}
return head;
}
};
方法2:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head == NULL) return NULL;
head->next = removeElements(head->next, val);
return head->val == val?head->next:head;
}
};