欢迎光临散文网 会员登陆 & 注册

力扣:203. 移除链表元素

2023-03-21 17:29 作者:薄荷硬糖酱  | 我要投稿

题目:

203. 移除链表元素

难度简单1198

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

 

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1输出:[]

示例 3:

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

 

提示:

  • 列表中的节点数目在范围 [0, 104] 内

  • 1 <= Node.val <= 50

  • 0 <= val <= 50

两种做法:

第一种对法:(先处理头指针)

注意:

  1. 判断循环是否会操作空指针,设置好循环条件避免操作空指针

  2. 先处理头指针,处理好之后记得跳出循环

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     struct ListNode *next;

 * };

 */


struct ListNode* removeElements(struct ListNode* head, int val){

    typedef struct ListNode* ListNode;

    while(head!=NULL){

        if(head->val==val){

            head = head->next;

        }else{

            break;

        }

    }

    ListNode p;

    p = head;

    while(p!=NULL&&p->next!=NULL){

        if(p->next->val==val){

            p->next = p->next->next;

        }else{

            p = p->next;

        }

    }

    return head;

}

第二种对法:(虚拟头节点)

注意:

  1. 创建一个虚拟头节点,创建之后还要为他分配空间(不然他就只是一个节点类型的指针而已)

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     struct ListNode *next;

 * };

 */


struct ListNode* removeElements(struct ListNode* head, int val){

    typedef struct ListNode ListNode;

    ListNode *shead;

    shead = (ListNode*)malloc(sizeof(ListNode));

    shead->next = head;

    ListNode *p = shead;

    while(p!=NULL&&p->next!=NULL){

        ListNode *temp = p->next;

        if(temp->val==val){

            p->next = temp->next;

            free(temp);

        }else{

            p = p->next;

        }

    }

    head = shead->next;

    free(shead);

    return head;

}


力扣:203. 移除链表元素的评论 (共 条)

分享到微博请遵守国家法律