力扣第203号问题的三种解法

Posted *平芜尽处是春山*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣第203号问题的三种解法相关的知识,希望对你有一定的参考价值。

203、移除链表元素

解法一

class Solution 
    public ListNode removeElements(ListNode head, int val) 
        while(head != null && head.val == val) 
            ListNode node = head;
            head = head.next;
            node.next = null;
        
        if(head == null) 
            return null;
         else 
            ListNode prev = head;
            while(prev.next != null) 
                if(prev.next.val == val) 
                    ListNode node = prev.next;
                    prev.next = node.next;
                    node.next = null;
                 else 
                    prev = prev.next;
                
            
            return 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 node = prev.next;
                prev.next = node.next;
                node.next = null;
             else 
                prev = prev.next;
            
        
            return dummyHead.next;
    

运行截图:

解法三(递归)

class Solution 
    public ListNode removeElements(ListNode head, int val) 
     if(head == null) 
            return null;
        
        head.next = removeElements(head.next,val);
        if(head.val == val) 
            return head.next;
        
        return head;
    

简化:

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;
    

运行截图:

以上是关于力扣第203号问题的三种解法的主要内容,如果未能解决你的问题,请参考以下文章

凑零钱问题的三种解法(Java)

动态规划 跳台阶问题的三种解法

Haskell的三种八皇后问题的解法

力扣第1013题 将数组分成和相等的三部分

统计单词数目的三种解法

一个小题目的三种不同的解法