给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
------------------------------------------------------------------------------------------------------------------------------
递归过程:
首先对除了头节点 head 以外的节点进行删除操作,然后判断head 的节点值是否等于给定的 val。如果head 的节点值等于val,则 head 需要被删除,因此删除操作后的头节点为 head.next;如果 }head 的节点值不等于}val,则head 保留,因此删除操作后的头节点还是 head。
实际操作时可以理解为,从尾到头的每一个元素执行上述操作,然后将执行结果返回前一位继续执行。
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//当链表为空时执行此操作,当不为空时,对最后一位的next执行此函数的时候执行此操作
if(head==nullptr)
{
return head;
}
//这里的是计算出head->next以便下一步计算出head
head->next=removeElements(head->next,val);
return head->val==val?head->next:head;
}
};
//如果对上述代码标记1 2 3,则从最后一位的next开始的执行顺序是1 2 3 2 3。。。