zoukankan      html  css  js  c++  java
  • LeetCode203. 移除链表元素

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
    
            while(head != null && head.val == val){
                // ListNode delNode = head;
                // head = head.next;
                // delNode.next = null;
                head = head.next;
            }
            if (head == null){
                return null;
            }
    
            ListNode prev = head;
            while(prev.next != null){
                if(prev.next.val == val){
                    // ListNode delNode = prev.next;
                    // prev.next = delNode.next;
                    // delNode.next = null;
                    prev.next = prev.next.next;
                }
                else{
                    prev = prev.next;
                }
            }
            return head;
    
        }
    }
    Solution 1
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    // 使用虚拟头结点版本
    // 虚拟头结点的作用:统一在链表中对头节点和其他节点相应的操作。
    // 此时,head指向的链表中所有的节点都有前一个节点,就不需要对第一个节点进行特殊处理了。
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
    
            ListNode dummyHead = new ListNode(-1);// 任意给一个值,虚拟头结点不会被访问
            dummyHead.next = head;
    
            ListNode prev = dummyHead;
            while(prev.next != null){
                if(prev.next.val == val){
                    // ListNode delNode = prev.next;
                    // prev.next = delNode.next;
                    // delNode.next = null;
                    prev.next = prev.next.next;
                }
                else{
                    prev = prev.next;
                }
            }
            return dummyHead.next;
    
        }
    }
    Soultion 2
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    // 使用递归版本
    // 思想是把原问题转化为更小的问题
    
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            if(head == null){
                return null;
            }
            ListNode res = removeElements(head.next, val);
            if(head.val == val){
                return res;
            }
            else{
                head.next = res;
                return head;
            }
    
        }
    }
    Soultion 3
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    // 对Solution3的递归版本进一步简化。
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            if(head == null){
                return null;
            }
            head.next = removeElements(head.next, val);
            return head.val == val ? head.next : head;
        }
    }
    Soultion 4
  • 相关阅读:
    android 第三方开源库 学习汇总之Butter Knife
    android Gradle下载慢,使用阿里镜像
    android 第三方开源库 学习汇总
    <Android Studio> 4.Adapter的那些事 <一>
    <Android Studio> 3.打包APK
    <Android Studio> 2.APP开机启动
    <Android Studio> 1.如何APP配置权限
    Android源码分析(十七)----init.rc文件添加脚本代码
    Android源码分析(十六)----adb shell 命令进行OTA升级
    Android源码分析(十五)----GPS冷启动实现原理分析
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/12823242.html
Copyright © 2011-2022 走看看