每日一题---移除链表元素


前言

Leetcode–-移除链表元素


1.题目

在这里插入图片描述


2.分析思路

首先要创建一个新的链表,在定义三个指针,newHead,newTail和pcur,分别代表新链表头,新链表尾以及用于遍历原链表。
其次是,如果pcur->val!=val,那么newTail下一个结点指向pcur(newTail->next=pcur),然后newTail往后移动(newTail=newTail->next),pcur也要往后一动,如果pcur->val==val,那么只需要pcur往后移动,直到遍历完原链表。
还有一个是在遍历完以后要将newTail的指向的指针设置为NULL
最后便要考虑特殊情况,例如示例2中,head=[],是一个空链表,那么在最开始便要判断head是否是空链表。
在这里插入图片描述


3.参考代码

typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
    if(head==NULL)
        return head;
    ListNode* pcur=head;
    ListNode* newHead=NULL;
    ListNode*newTail=NULL;
    while(pcur)
    {
        //如果pcur->val!=val,那么节点要尾插到新链表中
        if(pcur->val!=val)
        {
            //判断新链表是否为空
            if(newHead==NULL)
            {
                newHead=newTail=pcur;
            }else{
                newTail->next=pcur;
                newTail=newTail->next;
            }
        }
        pcur=pcur->next;
    }
    if(newTail)
        newTail->next=NULL;
    return newHead;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值