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
  • 相关阅读:
    Windows 10 安装双系统 CentOS 7
    杨辉三角_蓝桥杯
    特殊回文数_蓝桥杯
    十进制转十六进制_蓝桥杯
    十六进制转十进制_蓝桥杯
    十六进制转八进制_蓝桥杯
    String_Java
    编译原理知识
    3D_solarSys
    布线问题&魔法花园_最短路径
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/12823242.html
Copyright © 2011-2022 走看看