疑问:递归的这条语句struct ListNode* res = removeElements(head->next, val);是怎么做到删除数据域为val的结点的啊,到最后递归递归不是就走return NULL了吗
(力扣203),给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
代码:
struct ListNode* removeElements(struct ListNode* head, int val){
if (head == NULL) {
return NULL;
}
/* 删除原链表中头节点后面值为 val 的元素的节点 */
struct ListNode* res = removeElements(head->next, val);
/* 原链表头节点也是要删除的节点 */
if (head->val == val) {
return res;
/* 原链表头节点不是要删除的节点,将原链表中头节点后面挂接的更短的链表已删除值
为 val 的节点的链表挂接在原链表的头节点后面 */
} else {
head->next = res;
return head;
}
}