前言
经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。
描述
给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。示例 1:
输入: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 输出:[]提示:
- 列表中的节点数目在范围
[0, 104]
内1 <= Node.val <= 50
0 <= val <= 50
实现原理与步骤
- 递归函数确认:
public ListNode removeElements(ListNode head, int val)
函数功能,删除节点与val相同的ListNode。
函数参数: ListNode head为当前节点、val为比较的值。
函数返回值: 当前节点未移出返回当前节点,当前节点移除返回下一个节点。由于是链表,节点需要间的链式关系需要返回。
- 递归结束标志:
head ==null。
- 单层递归逻辑:
head.next=removeElements(head.next,val);
head.val==val?head.next:head;
当前元素值的判断,与val相同返回next节点,不同则返回自己。返回后赋值给上一节点的next。
实现代码
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
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;}}