0
点赞
收藏
分享

微信扫一扫

《LeetCode之每日一题》:286.移除链表元素

移除链表元素


题目链接: 移除链表元素

有关题目

给你一个链表的头节点 head 和一个整数 val ,
请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

在这里插入图片描述

示例 2:

输入:head = [], val = 1
输出:[]
示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]
提示:

列表中的节点数目在范围 [0, 10^4]1 <= Node.val <= 50
0 <= val <= 50

题解

法一:递归
参考官方题解

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeElements(struct ListNode* head, int val){
    if (head == NULL) 
        return NULL;
    
    head->next = removeElements(head->next, val);

    return head = head->val == val ? head->next : head;
}

在这里插入图片描述

法二:迭代
参考官方题解

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode));

    dummy->next = head;

    struct ListNode *pre = dummy;
    while(pre->next != NULL)
    {
        if (pre->next->val == val)
        {
            pre->next = pre->next->next;
        }
        else 
        {
            pre = pre->next;
        }
    }

    return dummy->next;
}

在这里插入图片描述

举报

相关推荐

0 条评论