第八周作业
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
伪代码实现:
时间复杂度O(m+n)
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
伪代码实现:
//M N单向列表ListM, ListN//定义M N头指针指向链表头pM = ListM;pN = ListN;if (m >= n) { //M链表更长或相当 for (i=0;i<m-n;i++) { pM = pM->next; } //M链表指向m-n位置,后续部分ListM和ListN长度相同,都是n for (i=0;i<n;i++) { if (pM.value == pN.value) { print "N链表第"+i+"位置"+ pN.value+"合并"; return 1; } pM = pM->next; pN = pN->next; }} else { //N链表更长 for (i=0;i<n-m;i++) { pN = pN->next; } //N链表指向n-m位置,后续部分ListM和ListN长度相同,都是m for (i=0;i<m;i++) { if (pM.value == pN.value) { print "M链表第"+i+"位置"+ pM.value+"合并"; return 1; } pM = pM->next; pN = pN->next; }}print "M N无合并";return 0;
时间复杂度O(m+n)
还未添加个人签名 2020.09.14 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论