【作业6】链表专题:链表的第一个中间结点
对应课程链接:拿捏算法面试:链表的中间结点
作业要求:
在 链表的中间结点 这道题中,如果节点个数是偶数,我们求的是第二个中间节点,现在我们做一下改变,要求返回第一个中间节点。
1、为了统一格式,为下面定义了一个方法
ListNode middleFirstNode(ListNode head){
}
请打卡给出你的代码。
答案:Leetcode 题解区就可以看到了,第一个精选题解就有。
PS:如果你不知道怎么打卡,可以看这里:打卡细则
对应课程链接:拿捏算法面试:链表的中间结点
作业要求:
在 链表的中间结点 这道题中,如果节点个数是偶数,我们求的是第二个中间节点,现在我们做一下改变,要求返回第一个中间节点。
1、为了统一格式,为下面定义了一个方法
ListNode middleFirstNode(ListNode head){
}
请打卡给出你的代码。
答案:Leetcode 题解区就可以看到了,第一个精选题解就有。
PS:如果你不知道怎么打卡,可以看这里:打卡细则
共以下 28 个回答
打卡
打卡
打卡
ok
打卡
####删除靠左边的结点,关键点:while(fast.next.next != null)
打卡:
删除靠左边的结点,关键点:while(fast.next.next != null)
//如果换成虚拟头结点写法,因为一开始的虚拟节点引入使得偶变奇,写法恢复
class Solution {
public ListNode middleNode(ListNode head) {
if(head null || head.next null){
return head;
}
ListNode slow = head;
ListNode fast = head;
while(fast.next!=null&&fast.next.next!=null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
时间复杂度O(n),额外空间复杂度O(1)
一
时间O(n)
如果你在开头保证了head不为空的话,那么在while里面,其实可以不用判断fast!=null哦,因为 fast.next.next不为空,那么进入循环赋值之后,fast一定不为空。
时间:$O(n)$
空间:$O(1)$
解:
打卡
时间复杂度O(n),空间复杂度O(1)
时间复杂度:O(n)