20220923 - 203. Remove Linked List Elements 移除链表元素

86 阅读1分钟

Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

Example 1:

Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]

Example 2:

Input: head = [], val = 1
Output: []

Example 3:

Input: head = [7,7,7,7], val = 7
Output: []

Constraints:

  • The number of nodes in the list is in the range [0, 104].
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

Solution

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

struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *p = (struct ListNode *)malloc(sizeof(struct ListNode));
    p->next = head;
    struct ListNode *q;
    head = p;
    while (p->next != NULL) {
        if (p->next->val == val) {
            q = p->next;
            p->next = q->next;
            free(q);
        } else {
            p = p->next;
        }
    }
    p = head;
    head = head->next;
    free(p);
    return head;
}

传入的链表是不带头结点的,可以先创建一个头结点接上去,最后传出的时候不带上那个节点即可。

然后就对 p->next 作判断,这样才能删除元素。

题目链接: 203. 移除链表元素 - 力扣(LeetCode)