移除链表元素
力扣题号:203
题目描述:
1 2
| 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。
|
示例 1:
1 2 3 4 5 6 7 8 9 10
| 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2:
输入:head = [], val = 1 输出:[] 示例 3:
输入:head = [7,7,7,7], val = 7 输出:[]
|
因为链表的存储是不连续的,所以链表的删除只需要跳过删除的节点指向待删除节点的下一节点就可以了
查看代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public ListNode removeElements(ListNode head, int val) { ListNode header = new ListNode(0); header.next = head; ListNode node = header; while (node.next != null){ if (node.next.val == val){ node.next = node.next.next; }else { node = node.next; } } return header.next; } }
|
当然还有一种就是递归
递归
查看代码
1 2 3 4 5 6 7 8 9
| class Solution { public ListNode removeElements(ListNode head, int val) { if (head == null) { return head; } head.next = removeElements(head.next, val); return head.val == val ? head.next : head; } }
|