当前位置:   article > 正文

<5> C++链表和递归 2021-05-28_头歌c++链表强化链表与递归

头歌c++链表强化链表与递归

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 <= k <= 50

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode() : val(0), next(nullptr) {}
  7. * ListNode(int x) : val(x), next(nullptr) {}
  8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  9. * };
  10. */
  1. //方法一:常规
  2. class Solution {
  3. public:
  4. ListNode* removeElements(ListNode* head, int val) {
  5. while(head!=NULL&&head->val==val){
  6. ListNode* delNode=head;
  7. head=head->next;
  8. delete delNode;
  9. }
  10. if(head==NULL) return NULL;
  11. ListNode* prev=head;
  12. while(prev->next!=NULL){
  13. if(prev->next->val==val){
  14. ListNode* delNode=prev->next;
  15. prev->next=prev->next->next;
  16. delete delNode;
  17. }
  18. else prev=prev->next;
  19. }
  20. return head;
  21. }
  22. };
  1. //方法三:虚拟头节点
  2. class Solution {
  3. public:
  4. ListNode* removeElements(ListNode* head, int val) {
  5. ListNode* dummyHead=new ListNode(-1);
  6. dummyHead->next=head;
  7. ListNode* prev=dummyHead;
  8. while(prev->next!=NULL){
  9. if(prev->next->val==val){
  10. prev->next=prev->next->next;
  11. }
  12. else prev=prev->next;
  13. }
  14. return dummyHead->next;
  15. }
  16. };
  1. //方法三:递归
  2. class Solution {
  3. public:
  4. ListNode* removeElements(ListNode* head, int val) {
  5. if(head==NULL) return NULL;
  6. head->next=removeElements(head->next,val);
  7. return head->val==val? head->next:head;
  8. }
  9. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/549123
推荐阅读
相关标签
  

闽ICP备14008679号