Leetcode 203. Remove Linked List Elements
方法1: iterate。這題主要是要設定一個prev node,然後還要設定一個哨兵node,就這個比較煩,因為遍歷的時候會修改原來的list導致最後不知道返回什麼了(我經常做到最後不知道要返回什麼)。時間複雜n,空間複雜1.
/**
* 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; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode curr = head;
ListNode sentinel = new ListNode(0);
sentinel.next = head;
ListNode prev = sentinel;
while(curr != null){
if(curr.val == val){
prev.next = curr.next;
}else{
prev = prev.next;
}
curr = curr.next;
}
return sentinel.next;
}
}
方法2: recursion。直接上程式碼,非常簡單易懂。時間n,空間1.
/**
* 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; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if (head == null) return null;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}
}
總結:
- 感覺遇到連結串列題我一般都會先想到iterate,卻沒有花多少精力在recursion上,其實recursion也是做連結串列題的很好的方法。
相關文章
- LeetCode | 203. Remove Linked List ElementsLeetCodeREM
- leetcode刷題--Remove Linked List ElementsLeetCodeREM
- [LeetCode] 2487. Remove Nodes From Linked ListLeetCodeREM
- leetcode Linked List CycleLeetCode
- Leetcode Reverse Linked List IILeetCode
- Leetcode Linked List Cycle IILeetCode
- LeetCode Delete Node in a Linked ListLeetCodedelete
- Leetcode Palindrome Linked ListLeetCode
- LeetCode 83.Remove Duplicates from Sorted List(從已排序連結串列中除去重複) Easy/Linked ListLeetCodeREM排序
- Leetcode Remove Duplicates from Sorted ListLeetCodeREM
- [leetcode]linked-list-cycle-iiLeetCode
- LeetCode 382 Linked List Random NodeLeetCoderandom
- LeetCode-Palindrome Linked ListLeetCode
- LeetCode-Linked List Random NodeLeetCoderandom
- LeetCode-Odd Even Linked ListLeetCode
- Leetcode-Reverse Linked List IILeetCode
- Leetcode-Linked List Cycle IILeetCode
- leetcode刷題--Reverse Linked ListLeetCode
- Reverse Linked List II leetcode javaLeetCodeJava
- LeetCode | 141 linked list cycleLeetCode
- Leetcode Remove Duplicates from Sorted List IILeetCodeREM
- Leetcode Remove Nth Node From End of ListLeetCodeREM
- Leetcode-Remove Duplicates from Sorted ListLeetCodeREM
- Remove Duplicates from Sorted List leetcode javaREMLeetCodeJava
- [LeetCode] 328. Odd Even Linked ListLeetCode
- 【Leetcode】141. Linked List CycleLeetCode
- LeetCode141:Linked List CycleLeetCode
- 【LeetCode】Flatten Binary Tree to Linked ListLeetCode
- Leetcode Flatten Binary Tree to Linked ListLeetCode
- leetcode141: Linked List CycleLeetCode
- Leetcode 19 Remove Nth Node From End of ListLeetCodeREM
- LeetCode 83. Remove Duplicates from Sorted ListLeetCodeREM
- 【Leetcode】83. Remove Duplicates from Sorted ListLeetCodeREM
- Leetcode-Remove Duplicates from Sorted List IILeetCodeREM
- Leetcode-Remove Nth Node From End of ListLeetCodeREM
- Remove Duplicates from Sorted List II leetcode javaREMLeetCodeJava
- Remove Nth Node From End of List leetcode javaREMLeetCodeJava
- LeetCode之Odd Even Linked List(Kotlin)LeetCodeKotlin