第八周作业

用户头像
熊桂平
关注
发布于: 2020 年 11 月 15 日

有两个单向链表(链表长度分别为 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 加入

还未添加个人简介

评论

发布
暂无评论
第八周作业