203. Remove Linked List Elements
recursion
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;
}
naive方法,先移除头部,再移除中间。
public ListNode removeElements(ListNode head, int val) {
// remove head
while (head != null && head.val == val) head = head.next;
// remove internal nodes
ListNode node = head;
while (node != null && node.next != null) {
if (node.next != null && node.next.val == val) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return head;
}
dummy node方法
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = dummy;
while (head != null) {
if (head.val != val) {
cur.next = head;
cur = head;
}
head = head.next;
}
cur.next = null; // in case that all elements in the list are same
return dummy.next;
}