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 --> 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值