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

 

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