zoukankan      html  css  js  c++  java
  • Lintcode452-Remove Linked List Elements-Easy

    Remove Linked List Elements

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

    Example

    Example 1:

    Input: head = 1->2->3->3->4->5->3->null, val = 3
    Output: 1->2->4->5->null
    

    Example 2:

    Input: head = 1->1->null, val = 1
    Output: null


    思路:

    函数参数中的ListNode head是链表中的第一个节点。所以要先加入头节点dummy, 并使head变为头节点(line 4)。(头节点指向链表的第一个节点)

    加入头节点有两个作用:

    1. dummy node 始终指向链表的第一个节点,这样返回整个链表只需要dummy.next
    2. head 作为头节点,使对链表第一个节点的操作(插入,删除等)和链表内其他节点相同,不用单独考虑第一个节点操作的特殊性。

    错误示范:

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

    可能抛出NullPointerException异常。比如 Input: head = 1->2->3->3->4->5->3->null, val = 3。

    原因:

    这个题是一个if-else case: 要么head结点的下一个结点值等于要删除的值,要么不等于。

    如果是第一种情况,那么在改变head.next属性后,head节点不需要向下移动一个。因为此时head.next 属性已经改变,需要重新判断 head.next != null 和 head.next.val ?= val

    正确代码:

     1 /**
     2  * Definition for ListNode
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 
    13 public class Solution {
    14     /**
    15      * @param head: a ListNode
    16      * @param val: An integer
    17      * @return: a ListNode
    18      */
    19     public ListNode removeElements(ListNode head, int val) {
    20         ListNode dummy = new ListNode(0);
    21         dummy.next = head;
    22         head = dummy;
    23         while (head.next != null) {
    24             if (head.next.val == val) {
    25                 head.next = head.next.next;
    26             } else {
    27                 head = head.next;
    28             }
    29         }
    30         return dummy.next;
    31     }
    32 }
  • 相关阅读:
    外部程序启动App
    简单修改文件名python脚本
    监听软键盘的显示
    ActionBar 笔记
    ActionBar 笔记
    Android Lock Pattern 图案解锁
    通过反射实现圆角ImageView
    android 通过命令行启动Apk
    ubuntu svn rabbitvcs 安装
    Android 两个界面间快速切换时,会发现有短暂黑屏
  • 原文地址:https://www.cnblogs.com/Jessiezyr/p/10648005.html
Copyright © 2011-2022 走看看