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
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
题意:删除链表中值等于val的节点;
注意问题:表头需要特殊处理:
1.如果一开始链表就是空的就需要返回空
2.如果表头剔除符合条件的节点之后,链表变为空,则返回一个NULL
其他后面的就按照正常的一个个删除就好了,但是实现的代码没有对内存进行释放,但是题目不要求就没有做了。
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<map>
#include<iostream>
using namespace std;
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
};
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head == NULL)
{
return head;
}
while(head->val == val)
{
if(head->next == NULL)
{
return NULL;
}
else
head = head->next;
}
ListNode* node = head;
while(node->next!=NULL)
{
if(node->next->val == val)
{
node->next = node->next->next;
}
else{
node = node->next;
}
}
return head;
}
};
ListNode* create_List()
{
ListNode* node1 = new ListNode;
ListNode* node2 = new ListNode;
ListNode* node3 = new ListNode;
ListNode* node4 = new ListNode;
ListNode* node5 = new ListNode;
node1->val = 1;
node1->next = node2;
node2->val = 2;
node2->next = node3;
node3->val = 1;
node3->next=node4;
node4->val = 3;
node4->next = node5;
node5->val = 1;
node5->next = NULL;
return node1;
}
int main()
{
ListNode* node = new ListNode;
ListNode* head = new ListNode;
//head = create_List();
head->val = 1;
head->next = NULL;
node = head;
while(node)
{
cout << node->val <<" ";
node = node->next;
}
cout<<endl;
Solution s;
head = s.removeElements(head,1);
node = head;
while(node)
{
cout << node->val <<" ";
node = node->next;
}
cout << endl;
return 0;
}