疑问:递归的这条语句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;
}
}
晓得了,有同样困扰的小伙伴,看看这句话能不能帮到你:递归调用时可以把它分为一级一级的,当到达临界条件后,返回的过程中,当某一级递归结束,则该级函数马上将程序的控制权交给该函数的调用函数(执行函数里未执行的内容)。(在搜集资料后,自己理解的,有不当地方,还望及时指出