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

[LeetCode] #203 移除連結串列元素

[LeetCode] #203 移除連結串列元素

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

輸入:head = [1,2,6,3,4,5,6], val = 6

輸出:[1,2,3,4,5]

遍歷連結串列,找到相同val,刪除

難點在頭節點的處理。若頭節點等於val,可以從第二個節點開始遍歷,返回以第二個節點為頭節點的連結串列

class Solution
{
    public ListNode removeElements(ListNode head, int val)
    {
        while (head != null
&& head.val == val) head = head.next; ListNode p = head; if (p != null) { while (p.next != null) { if (p.next.val == val) p.next = p.next.next; else p = p.next; } } return head; } }

或者設定虛擬節點

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode newHead = new ListNode(-1);
        newHead.next = head;
        ListNode p = newHead;
        if(p.val == val)  newHead = new ListNode(p.next.val,p.next.next);
        while(p.next != null){
            
if(p.next.val == val) p.next = p.next.next; else p = p.next; } return newHead.next; } }

再或者使用遞迴

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

知識點:

總結: