构建一个虚头结点统一所有结点的删除操作
及时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;
    
}

图片.png


WildDuck
0 声望1 粉丝

引用和评论

0 条评论