数据结构--链表

力扣 203. 移除链表元素

1.题目描述

题目链接

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

输入: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 <= val <= 50

链表的删除,注意虚拟头结点的应用。

c++和Java都写了一下,好久不用c++基本语法忘了个八八九九。使用c++的时候,由于c++的内存回收需要手动回收,所以不要忘记delete掉已经使用结束的链表。

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
   ListNode* removeElements(ListNode* head, int val) {

         ListNode* listNode = new ListNode(-1);         
         listNode->next = head;
         ListNode* p = listNode;
 

         while( p->next != nullptr ){

                if(p->next->val == val){

                    ListNode* q = new ListNode(-1);
                    q = p->next;
                    if(q)
                        p->next = q->next;
                    delete q;
             
                }
                else 
                 p = p->next;
         }
         head = listNode->next;
         delete listNode;
         return head;
         
    }

java的写法可以说是完全一样了,只不过java的JVM提供了垃圾回收机制,JVM可以自动进行垃圾回收,不需要手动删除。

 public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

    public ListNode removeElements(ListNode head, int val) {

         ListNode listNode = new ListNode(-1);
         listNode.next = head;
         ListNode p = listNode;

         while (p.next != null) {

             if(p.next.val == val){
                 ListNode q = new ListNode(-1);
                 q = p.next;
                 if (q != null)
                    p.next = q.next;
             }
             else
                 p = p.next;

         }

        return listNode.next;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙丁鱼w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值