前言:接近20day的时间,终于来到了链表。
题型:指针、链表
链接:203. 移除链表元素 - 力扣(LeetCode)
来源: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;}
};