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

文章目录

  • 思路
    • 方法1
    • 方法2
  • 代码
    • 方法1

思路

方法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;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部