数据结构与算法 - 链表

用户头像
阿飞
关注
发布于: 2020 年 07 月 29 日

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

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

链表(链式存储的线性表)是指采用一组地址任意的存储单元存放线性表中的数据元素。

单链表:



循环链表:将上面单链表的尾节点的next指针改为头节点,此链表就变成循环链表。

上面的问题结合单链表的结构:

方法一:在第一个链表上顺序遍历每个结点,每遍历到一个结点时,在第二个链表上顺序遍历每个结点,时间复杂度是o(m*n)

方法二:假设m>n 先让长的链表先走相差的数,然后一起走,找到第一个相同的结点就是所求结果 时间复杂度o(m)

private Node header1;//保存头节点

private Node header2;//保存头节点

//从头节点开始搜索

Node current1 = header1;

Node current2 = header2;

for(int i=0;i<m-n&&current1!=null;i++){

current1 =current1.next;

}

while(current1!=current2)

{ current1=current1.next;

current2=current2.next;

}

return current1.data;////节点data相同,则为公共节点



发布于: 2020 年 07 月 29 日 阅读数: 29
用户头像

阿飞

关注

还未添加个人签名 2017.12.12 加入

还未添加个人简介

评论

发布
暂无评论
数据结构与算法-链表