企业官方网站制作,互联网十大创业项目,做网站主流网站,北航网站建设203. 移除链表元素 题目方法1递归方法2迭代 题目
给你一个链表的头节点 head 和一个整数 val #xff0c;请你删除链表中所有满足 Node.val val 的节点#xff0c;并返回 新的头节点 。
方法1递归
class Solution {
public:ListNode* removeElements(ListNode* head, in… 203. 移除链表元素 题目方法1递归方法2迭代 题目
给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。
方法1递归
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {if (head nullptr) {return head;}head-next removeElements(head-next, val);return head-val val ? head-next : head;}
};removeElements(head-next, val) 这个操作会删除链表 head 中所有与给定值 val 相等的节点。但是没有判断头节点 每次传入的参数 head-next 都是链表中当前节点的下一个节点。这个操作会不断地遍历链表直到最后一个节点。在遍历的过程中如果发现当前节点的值等于 val那么就将当前节点删除。
通过递归调用我们可以不断地在链表中搜索并删除符合条件的节点。最终整个链表会被遍历一遍并且所有与 val 相等的节点都会被删除。 return head-val val ? head-next : head;这行判断了头节点的值有没有和val相等
方法2迭代
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp-next ! NULL) {if (temp-next-val val) {temp-next temp-next-next;} else {temp temp-next;}}return dummyHead-next;}
};struct ListNode* dummyHead new ListNode(0, head); ListNode结构体这是一个链表节点的自定义结构体。它包含两个成员变量一个是存储节点值的val另一个是指向下一个节点的指针next。 temp-next temp-next-next;删除下一个节点