题目描述
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
示例 1:
示例
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 输入:head = [7,7,7,7], val = 7 输出:[]
参考实现
方式1、使用递归实现
/*** 递归实现删除链表元素** @param head* @param val* @return*/public static ListNode removeElements(ListNode head, int val) {if (head == null) {return null;} else {head.next = removeElements(head.next, val);if (head.val == val) {return head.next;} else {return head;}}}
方式2、使用循环实现
/*** 循环删除链表元素** @param head* @param val* @return*/public static ListNode removeElementsxh(ListNode head, int val) {//声明虚拟节点ListNode dummy = new ListNode(val - 1);dummy.next = head;//复制出来ListNode prev = dummy;while (prev.next != null) {//满足删除条件进行删除if (prev.next.val == val) {prev.next = prev.next.next;} else {//不满足进行遍历prev = prev.next;}}return dummy.next;}