LeetCode: 203.移除链表元素(c语言,单链表)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
    if(head==NULL)
        return head;
    ListNode *NewHead,*NewTail;
    ListNode *pcur=head;
    NewHead=NewTail=(ListNode*)malloc(sizeof(ListNode));
    if(NewHead==NULL)
    {
        return 1;
    }
    while(pcur)
    {
        if(pcur->val!=val)
        {
            NewTail->next=pcur;
            NewTail=NewTail->next;
        }
        pcur=pcur->next;
    }
    if(NewTail)
        NewTail->next=NULL;
    ListNode *oj=NewHead;
    NewHead=NewHead->next;
    return NewHead;
}

 代码解读:

1.节点的取值范围为0-10^4,如果head一开始就是NULL,那么直接返回head.

2.再while循环中,我们申请了一块空间,作为头节点,这就是带头的单向链表了,这么做的目的是,我们可以在while循环中,不用去判空,即不用去判断NewHead和NewTail为NULL。避免如果要多次判空带来的重复代码。

3.我们不知道NewTail里的next指针是不是为空,那么我们就应该去把NewTail->next=NULL,防止他指向其他结点。

4.我们申请的动态空间要主动去释放,避免内存泄漏。但是我们要先保存NewHead->next,因为如果我们先释放头结点,我们就不能找到下一节点。

 

 

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值