203移除链表元素(单链表基本操作)

1、题目描述

删除链表中等于给定值 val 的所有节点。

2、示例

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

3、题解

基本思想:单链表基本操作,记得删除等于val节点内存空间

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct ListNode {
	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL) {}
};
void Init_ListNode(ListNode* head, vector<int> vec)
{
	if (vec.size() == 0)
	{
		head = NULL;
		return;
	}
	ListNode* p;
	p = head;
	p->val = vec[0];
	for (int i = 1; i < vec.size(); i++)
	{
		ListNode* q = new ListNode(vec[i]);
		p->next = q;
		p = p->next;
	}
}
class Solution {
public:
	ListNode* removeElements(ListNode* head, int val) {
		//基本思想:单链表基本操作,记得删除等于val节点内存空间
		ListNode* start = new ListNode(0);
		start->next = head;
		ListNode* p = start, * toDelete = nullptr;
		while (p != NULL && p->next != NULL)
		{
			if (p->next->val == val)
			{
				toDelete = p->next;
				p->next = p->next->next;
				delete toDelete;
			}	
			else
			    p = p->next;
		}
		return start->next;
	}
};
int main()
{
	Solution solute;
	ListNode* head = new ListNode(0);
	vector<int> vec = { 6,6,6,1,2,3,6,4,5,6 };
	Init_ListNode(head, vec);
	ListNode* p;
	int val = 6;
	p = solute.removeElements(head, val);
	while (p != NULL)
	{
		cout << p->val << " ";
		p = p->next;
	}
	cout << endl;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章