1. 程式人生 > 其它 >LeetCode - 203. 移除連結串列元素

LeetCode - 203. 移除連結串列元素

前言

/**
 * @Description LeetCode 203. 移除連結串列元素
 * 給你一個連結串列的頭節點 head 和一個整數 val ,
 * 請你刪除連結串列中所有滿足 Node.val == val 的節點,並返回新的頭節點 。
 *      列表中的節點數目在範圍 [0, 104] 內
 *      1 <= Node.val <= 50
 *      0 <= val <= 50
 */

具體實現

  • 實現類
public class Solution{

    /**
     * Definition for singly-linked list.
     */
    public class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }

    /**
     * 解題一 迭代方法刪除連結串列中所有節點值等於特定值的節點
     * 用prev表示當前節點。如果prev的下一個節點不為空且下一個節點的節點值等於給定的val則刪除
     * 如果prev的下一個節點的節點值不等於給定的val,則將prev移動到下一個節點即可
     *
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements(ListNode head, int val) {
        while (head != null && head.val == val) {
            head = head.next;
        }

        if (head == null) {
            return null;
        }

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

        return head;
    }

    /**
     * 解題二 虛擬頭結點迭代
     * 建立虛擬節點dummyHead,令dummyHead.next=head,
     * 初始化prev=dummyHead,然後遍歷連結串列進行刪除操作。
     * 最終返回dummyHead.next 即為刪除操作後的頭節點。
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements1(ListNode head, int val) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode prev = dummyHead;
        while(prev.next != null) {
            if (prev.next.val == val) {
                prev.next = prev.next.next;
            } else {
                prev = prev.next;
            }
        }

        return dummyHead.next;
    }

    /**
     * 解題三 遞迴
     * head不為空時遞迴地進行刪除操作,後判斷head的節點值是否等於val並決定是否要刪除head
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements2(ListNode head, int val) {
        if (head == null) {
            return null;
        }
        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;
    }
}
- End -
一個努力中的公眾號
關注一下吧
以上為本篇文章的主要內容,希望大家多提意見,如果喜歡記得點個推薦哦 作者:95.8℃ 出處:https://www.cnblogs.com/maggieq8324/ 本文版權歸作者和部落格園共有,歡迎轉載,轉載時保留原作者和文章地址即可。