一. 问题
原题引自203. 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
二. 思路
- 通过 递归/迭代 遍历链表。
三. 解决
- 迭代
public ListNode removeElements(ListNode head, int val) {
ListNode result = new ListNode(-1);
result.next = head;
ListNode node = result;
while (node.next != null) {
if (node.next.val != val) {
node = node.next;
} else {
node.next = node.next.next;
}
}
return result.next;
}
- 递归
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;
}
四. 执行结果
- 迭代
执行用时 : 2 ms, 在Remove Linked List Elements的Java提交中击败了98.94% 的用户
内存消耗 : 42.7 MB, 在Remove Linked List Elements的Java提交中击败了70.29% 的用户
- 递归
执行用时 : 2 ms, 在Remove Linked List Elements的Java提交中击败了98.94% 的用户
内存消耗 : 42.8 MB, 在Remove Linked List Elements的Java提交中击败了69.15% 的用户