乐趣区

关于数据结构与算法:Linklist经典题目仅一次遍历删除所有特定值的element

构建一个虚头结点对立所有结点的删除操作
及时 free 好习惯
移除链表元素
给你一个链表的头节点 head 和一个整数 val,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetb…
起源:力扣(LeetCode)
题解作者:WildDuck

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

typedef struct ListNode* ListNode_pointer;

struct ListNode* removeElements(struct ListNode* head, int val)
{
    // 手动构建头结点,将删除 elem 的操作对立
    ListNode_pointer save_head = head;
    ListNode_pointer free_pointer = NULL;
    ListNode_pointer temp_head = (ListNode_pointer)malloc(sizeof(struct ListNode));
    ListNode_pointer save_temp_head = temp_head;
    temp_head -> next = head;
    
    while(head != NULL)
    {if(head->val != val)
        {
            temp_head = temp_head->next;
            head = head->next;
        }
        else if(head->val == val)
        {
            temp_head -> next = head->next;
            free_pointer = head;
            head = head->next;
            free(free_pointer);
        }
    }
    free_pointer = save_temp_head;
    save_temp_head = save_temp_head->next;
    free(free_pointer);
    return save_temp_head;
    
}

退出移动版