Remove Linked List Elements
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 –> 5Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
就是删除一个链表中的元素值均为XX的 节点
这道题目还是比较简单的,注意开始的节点如果是6,得先删除
比如
661263456
直接删除2次之后
进入到
1263456 再进行剩下的判断
附上代码
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* removeElements(ListNode* head, int val)
{
while (head != NULL&&head->val == val)
{
ListNode*temp = head->next;
delete head;
head = temp;
}
ListNode* p = head;
ListNode* prev=NULL;
while (p != NULL)
{
if (p->val == val)
{
prev->next = p->next;
delete p;
p = prev;
}
prev = p;
p = p->next;
}
return head;
}
};
做完题之后,按照习惯去看了下其他人是怎么写的
发现了一个写的很简洁的 用 递归的方法
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head != NULL)
{
(head->val == val ? head : head->next) = removeElements(head->next, val);
}
return head;
}
};
就是根据每个节点判断,如果是等于,就去掉,不是的话指向另一个,想法其实差不多,但是能想到这种写法的,感觉真是挺厉害的。