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

語言: CN / TW / HK

移除連結串列元素

題目描述:給你一個連結串列的頭節點 head 和一個整數 val ,請你刪除連結串列中所有滿足 Node.val == val 的節點,並返回 新的頭節點 。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-linked-list-elements/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:連結串列遍歷

首先,初始化一個結點firstNode指向head結點,cur指向head結點,last指向firstNode結點,然後開始遍歷:

  • 首先cur不能為空;
  • 如果cur結點的值等於目標值val,則將last的next指向cur的next,並且cur賦值為cur的next;
  • 如果cur結點的值不等於目標值val,則將last和cur結點往後移一位。

遍歷結束後,返回firstNode的next結點即為處理後的連結串列。

public class LeetCode_203 {
    public static ListNode removeElements(ListNode head, int val) {
        ListNode firstNode = new ListNode(-1);
        firstNode.next = head;
        ListNode cur = firstNode.next;
        ListNode last = firstNode;
        while (cur != null) {
            if (cur.val == val) {
                last.next = cur.next;
                cur = last.next;
            } else {
                last = cur;
                cur = cur.next;
            }
        }
        return firstNode.next;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(6);
        head.next.next.next = new ListNode(3);
        head.next.next.next.next = new ListNode(6);

        removeElements(head, 6);
        while (head != null) {
            System.out.print(head.val + " ");
            head = head.next;
        }
    }
}

【每日寄語】 在這個並非盡善盡美的世界上,勤奮會得到報償,而遊手好閒則要受到懲罰。