[LeetCode] #203 移除連結串列元素
阿新 • • 發佈:2021-09-08
[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; } }
知識點:無
總結:無