删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
用递归的方式求解该问题
- 将链表分解成头节点和一个更小的链表;
- 在更小的链表中删除给定的元素,并将新链表
res
返回; - 然后判断头节点应不应该被删除:如果头节点应该被删除,就返回新链表
res
;如果头节点不该被删除,就把新链表链在head
后,返回head
; - 那么不能再小的基本问题是:链表缩短到不能再短,就是链表中已经没有节点的情况,即
head == null
;
/**
* 删除链表中等于给定值 val 的所有节点。
* 示例:
* 输入: 1->2->6->3->4->5->6, val = 6
* 输出: 1->2->3->4->5
*/
public class Solution3 {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return head;
}
ListNode res = removeElements(head.next, val);
if (head.val == val) {
return res;
} else {
head.next = res;
return head;
}
}
}