原题链接:https://leetcode.com/problems/remove-linked-list-elements/
题目:
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
题解:
建一个dunmy,dunmy.next = head,为了防止head.val 等于要被去掉的value时删掉head不方便表示。
Time Complexity: O(n), n是list长度. Space: O(1).
AC Java:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode removeElements(ListNode head, int val) { 11 if(head == null){ 12 return head; 13 } 14 15 ListNode dummy = new ListNode(0); 16 dummy.next = head; 17 ListNode cur = dummy; 18 while(cur.next != null){ 19 if(cur.next.val == val){ 20 cur.next = cur.next.next; 21 }else{ 22 cur = cur.next; 23 } 24 } 25 return dummy.next; 26 } 27 }
Recursion Method, stop condition 是 head == null, return head.
Time Complexity: O(n), n 是list长度. Space: O(n), stack space.
AC Java:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode removeElements(ListNode head, int val) { 11 if(head == null){ 12 return head; 13 } 14 head.next = removeElements(head.next, val); 15 return head.val == val ? head.next : head; 16 } 17 }