LeetCode
第203題題目: 刪除鏈表中等於給定值 val 的全部節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5
1.不使用虛擬頭節點java
public class Solution { public ListNode removeElements(ListNode head, int val) { // 鏈表不爲空,而且頭節點就是要刪除的元素 while (head != null && head.val == val) { ListNode delNode = head; head = head.next; delNode.next = null; } if (head == null) { // 全部元素都是要刪除的元素,而且在上面已經刪完 return head; } else { // 如今的鏈表頭節點不是要刪除的元素 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; } } }
2.使用虛擬頭節點code
public class Solution2 { public ListNode removeElements(ListNode head, int val) { // 虛擬頭節點 ListNode dummyHead = new ListNode(0); 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; } }
3.遞歸遞歸
public class Solution3 { 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; } }