LeetCode笔记:203. Remove Linked List Elements

问题:

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5

大意:

移除链表中素有值为val的元素。

例子:
给出: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
返回: 1 –> 2 –> 3 –> 4 –> 5

思路:

这道题没什么特殊的,遍历链表遇到值跟val相同的就删除节点就好,链表删除节点的做法也比较固定了,只是要细心一点不要漏了什么特殊情况,比如删除节点时是最后一个节点的处理、链表头部连续出现要删除的节点时的处理等等,另外因为最终要返回的是头结点,所以这个节点要有一个变量去保留着最后返回。

我的做法是先把头部的连续的目标节点都删掉,然后遍历链表,中间遇到了就删,当然遇到时要判断是不是最后一个节点了,是的话就next直接指向null了。在删头结点时,因为可能循环着遇到后面没节点了的情况,比如 1 –> 1 这种全部要删除的,所以在循环条件中利用 && 运算符的特性,先判断节点存在,然后再判断值,如果节点不存在,第一个判断条件就无效,那么就不会处理第二个判断条件,否则直接判断值有可能在无节点时报错。

代码(Java):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) return head;

        ListNode result = head;
        while (result != null && result.val == val) result = result.next;

        while (head.next != null) {
            if (head.next.val == val) {
                if (head.next.next != null) head.next = head.next.next;
                else head.next = null;
            } else {
                head = head.next;
            }
        }

        return result;
    }
}

合集:https://github.com/Cloudox/LeetCode-Record
版权所有:http://blog.csdn.net/cloudox_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值