Leetcode题库203.移除链表元素(尾指针填充 / 虚头指针定义 c实现)

思路

方法1

下面提供了方法1的代码,可供参考
ret指针做返回链表的头指针,last做返回链表的尾指针
第一步:找头

使用指针p遍历链表,找到第一个val值不为给定val值的结构体,将其赋给ret指针,并使得last指针指向当前返回指针尾部,也就是ret指针指向的地方(因为当前返回链表长度为1)

第二步:填尾
使用指针p遍历链表,找到val值不为给定val值的结构体将其赋给last指针的next,然后调整last使其再次指向返回链表尾部

方法2

方法2较为简单,未给出代码实现
第一步:
定义一个虚的头部指针ret,使得ret->指向head,一个遍历指针p = ret

第二步:
若p->next->val = val,说明p->next需要被剔除,则令p = p->next->next,如此循环直至遍历整个链表
最后去掉我们先前定义的虚的头部指针,返回ret->next即可

代码

方法1

struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *ret = NULL, *last = NULL, *p = head;
    while(p!=NULL){
        if(ret==NULL){
            if(p->val!=val){
                ret = p;
                p = p->next;
                last = ret;
                last->next = NULL;
            }
            else{p = p->next;}
        }
        else{
            if(p->val!=val){
                last->next = p;
                p = p->next;
                last = last->next;
                last->next = NULL;
            }
            else{p = p->next;}
        }
    }
    return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值