[链表] 力扣 203. 移除链表元素

给你一个链表的头节点 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、初始化一个空结点,没有复制,指针指向list

        ListNode list=new ListNode();

2、初始化一个空结点,初始值为0,指针指向为list

        ListNode list=new ListNode(0);

3、初始化一个空结点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list

        ListNode list=new ListNode(0,head);

4、定义一个空链表

        ListNode list=null;

通常定义一个空结点需要有结点的next指针指向,否则,只是定义一个空结点

通常使用以下两种方法:

        ListNode list=new ListNode(0,head);

或者

       ListNode list=new ListNode(0);

  list.next=head;

题解

链表的基本操作

  • 使用指针p遍历链表:while(p->next!=NULL){p=p->next;}
  • 指针p删除当前指向的元素:p->next=p->next->next

本题中因为head头节点可能被删除,所以创建空结点指向head,处理后直接返回空结点的next

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        //初始化一个空结点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list
        struct ListNode* list=new ListNode(0,head); 
        struct ListNode* p=list;//指针p往前走
        while(p->next!=NULL){
            if(p->next->val==val){
                p->next=p->next->next;
            }
            else{
                p=p->next;
            }
        }
        return list->next;
    }
};
posted @ 2022-05-31 20:53  付玬熙  阅读(19)  评论(0编辑  收藏  举报