前言:接近20day的时间,终于来到了链表。
题型:指针、链表
来源:LeetCode
题目描述
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
题目样例
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1 输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7 输出:[]
提示:
- 列表中的节点数目在范围
[0, 104]
内 1 <= Node.val <= 50
0 <= val <= 50
题目思路
本题主要目的是熟悉下【链表】这个数据结构,比如申请结点,创建指针等
解题思路就是单链表的元素移除,但考虑 “头结点->val == val” 移除头结点这个操作,可以申请一个结点来作为【头结点的头结点】
C++代码
C++链表涉及到删除操作,需要把结点给delete掉
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* Vhead= new ListNode(0);
Vhead ->next = head;
ListNode* p=Vhead;
while(p->next != NULL)
{
if(p -> next -> val == val)
{
ListNode* temp = p -> next;
p -> next=p -> next -> next;
delete temp;
}
else
{
p=p -> next;
}
}
head = Vhead -> next;
delete Vhead;
return head;
}
};