写点什么

第八周作业 & 总结

用户头像
胡益
关注
发布于: 2021 年 01 月 18 日

作业一:

(至少完成一个)

1、有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。

请用代码(或伪代码)描述算法,并给出时间复杂度。

解题思路

链表 A 长度:A=a+c,

链表 B 长度:B=b+c。(c 代表相交后面的公共节点)

若无相遇点则 A+B=B+A,走过两轮后都停在 NULL。

假如有相遇点则 a+c+b+c = b+c+a+c

倒推:会在公共 c 点相遇

public static ListNode test2(ListNode headA,ListNode headB){         ListNode cur1 = headA;         ListNode cur2 = headB;         while(cur1 != cur2){             cur1 = cur1 != null ? cur1.next : headB;             cur2 = cur2 != null ? cur2.next : headA;         }         return cur1;     }
复制代码

复杂度分析

  • 时间复杂度 : O(m+n)

  • 空间复杂度 : O(1)


作业二:

  • 根据当周学习情况,完成一篇学习总结


用户头像

胡益

关注

还未添加个人签名 2020.11.06 加入

还未添加个人简介

评论

发布
暂无评论
第八周作业&总结