leetcode203:删除链表中元素e的三种解法。

版权声明:文章为作者原创,若要转载请获得作者同意。尊重版权,从你我做起! https://blog.csdn.net/qq_37768971/article/details/88257900

一、链表且不定义虚拟头结点的解法:

package IMUHERO;
class Solution {
    public ListNode removeElements(ListNode head, int val) {
//当头结点不为空,且头结点的val与输入一致时(用于删除头结点,特殊处理):
        while (head.val==val && head!=null){    //注意不能颠倒与的前后内容,系统会报错,具体原因还没解决(可能是系统bug)
        ListNode delNode =head;
        head=head.next;
        delNode.next=null;
        }
//当整个链表为空:
        if (head==null)
            return head;

//用于删除中间节点
        ListNode prev=head;
        while (prev.next!=null){
            if (prev.next.val==val){
                ListNode delNode=prev.next;
                prev.next=delNode.next;
                delNode.next=null;
            }
            else
                prev=prev.next;
        }


        return head;
    }
}

二、定义头结点——精简if操作:

package IMUHERO;

class Solution2 {
    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;
            }else prev=prev.next;
        }
        return dummyhead.next;
    }
}

三、使用递归算法:最精简

package IMUHERO;

class Solution3 {
    public ListNode removeElements(ListNode head, int val) {
        if (head==null)return head;
        head.next=removeElements(head.next,val);
        if (head.val==val) {
            return head=head.next;
        }else
        return head;
        //也可以:return head.val==val?head.next:head;

    }
}

四:提交结果

成功

显示详情

执行用时: 7 ms, 在Remove Linked List Elements的Java提交中击败了60.14% 的用户

内存消耗: 44.2 MB, 在Remove Linked List Elements的Java提交中击败了0.88% 的用户

进行下一个挑战:

猜你喜欢

转载自blog.csdn.net/qq_37768971/article/details/88257900
今日推荐