【链表】LeetCode #203 移除链表元素

题目链接:

LeetCode #203 移除链表元素

题目描述:

#203. 移除链表元素

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

通过次数92,417 提交次数201,211

分析:

本题是道简单题,但是想一次就A还是有点儿不容易的。

需要注意的有以下几点:

  • 要做删除操作,需要找到的是被删节点的前一个节点,这样只需让 i.next = i.next.next,就可以达到删除元素的目的;
  • 头结点 head 也可能是被删节点,所以返回 head 是不行的,此时一般的做法是创建一个伪节点 dummydummy 的下一个指向头节点 head,只需要返回 dummy.next
  • 链表的题要自己动手画下来,思绪不清晰时容易各种空指针,不只针对该题。

代码及提交截图:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
 /*
 * 两点注意:
 * 要做删除操作,需要找到的是被删节点的前一个节点;
 * 头结点 head 也可能是被删节点,所以返回的不一定是 head
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head == null) return null;
        ListNode dummy = new ListNode(-1);// dummy 伪节点,指向头结点 head
        ListNode i = dummy;
        dummy.next = head;
        while(i != null && i.next != null){//为了方便删除操作,找的是被删节点的前一个
            if(i.next.val == val){
                i.next = i.next.next;
            }else{
                i = i.next;
            }
        }
        return dummy.next;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值