【作业5】链表专题:用递归解决LeetCode203.移除链表元素
对应课程链接:拿捏算法面试:LeetCode203.移除链表元素
作业要求:
1、给出 203. 移除链表元素 运行通过的代码。
2、要求采用「递归」来做,并且给出额外空间复杂度和时间复杂度是多少
提示:1、递归调用的时候,是会消耗栈空间哦
答案:Leetcode 题解区就可以看到了,第一个精选题解就有。
PS:如果你不知道怎么打卡,可以看这里:打卡细则
对应课程链接:拿捏算法面试:LeetCode203.移除链表元素
作业要求:
1、给出 203. 移除链表元素 运行通过的代码。
2、要求采用「递归」来做,并且给出额外空间复杂度和时间复杂度是多少
提示:1、递归调用的时候,是会消耗栈空间哦
答案:Leetcode 题解区就可以看到了,第一个精选题解就有。
PS:如果你不知道怎么打卡,可以看这里:打卡细则
共以下 28 个回答
class Solution {
//移除Node.val val的节点
public ListNode removeElements(ListNode head, int val) {
while(head != null && head.val val){
head = head.next;
}
if(head null){
return head;
}
ListNode pre = head;
ListNode cur = head.next;
if(cur null){
return head;
}else if(cur.val val){
pre.next = cur.next;
}else{
pre = cur;
}
cur = pre.next;
//修改pre并递归
pre = removeElements(pre, val);
return head;
}
}
“`java
空间时间复杂度都为O(n)
第一行代码中的head = removeElements(head.next, val); 是将当前节点的下一个节点作为新的头节点,并传入removeElements函数进行递归删除操作。
第二行代码中的head.next = removeElements(head.next, val); 是将当前节点的下一个节点重新连接到删除操作后的链表,并传入removeElements函数进行递归删除操作。
时间复杂度,空间复杂度O(n)
递归
– Time:O(n),遍历所有节点
– Space :O(n),递归调用栈深度为n
打卡
打卡
打卡
时间复杂度O(n),空间复杂度O(n)
时间复杂度:O(n),n为链表的长度,需要遍历整个链表。
空间复杂度:O(n),n为递归栈的深度,最坏情况下链表中所有节点都需要被删除,递归栈的深度为n
打卡:
时间o(n),空间o(n)
class Solution {
//函数的功能是删掉val的节点
public ListNode removeElements(ListNode head, int val) {
//递归结束条件,如果不为空则一直递归调用下去
if(head null){
return head;
}
head.next = removeElements(head.next,val);
//删除的方法,遇到是目标值那就直接删除,所以返回的是next,如果不是目标值那就正常出栈
return head.val val?head.next:head;
}
}
go语言递归解法,时间复杂度O(n),空间复杂度O(n)
一
时间: $O(n)$
空间: $O(1)$
时间复杂度: O(n)
时间复杂度:O(n),n为链表的长度,需要遍历整个链表。
空间复杂度:O(n),n为递归栈的深度,最坏情况下链表中所有节点都需要被删除,递归栈的深度为n
时间复杂度O(n)
时间O(n), 空间O(n)
作业五打卡
时间复杂度O(n),空间复杂度O(n)
要求用递归,你这个方法不是递归。
已修改