基于顺序表长度计算的相关结点定位算法

来源:互联网 发布:用java打印乘法表 编辑:程序博客网 时间:2024/05/01 06:12

[问题]:

基于顺序表长度计算的相关定位算法
要定位两条链表中交叉结点的位置:E(4)

                        [lenLink1]                               [Common]
      (Link1)L(9)->A(8)-> B(7) ->C(6) ->D(5)->   E(4) ->G(3)->T(2)->W(1)->P(0)
                                                     /
      (Link2)            F(8)->O(7)->H(6) ->Q(5) ->
                                    [lenLink2]


刚开始想到遍历两个链表,把两个链表分别装入两个不同的栈空间中,然后同步出栈:

比较两个栈中栈顶元素,
若相同,则两个栈的栈顶元素出栈
若不同,则交叉结点是“之前”记录的栈顶元素(第一次时考虑没交叉结点的情况)


虽然这种复杂度较链表逆序的复杂度要低一些,但是最简单的办法是如下

利用链表长度,计算出长度的差值,然后使得两个链表的较长的那个链表的指针先走差值个元素。
然后两条链表的指针齐步走,判断走到的结点是否为同一结点,“是”则定位到了该交叉结点,“否”则继续走。

如果最后都走到链表结尾,依然不同,则判断出两天链表不相交,没有交叉结点。

[解答]

 

 

输出:
(1)CreateCrossLinkList(link1, link2, 5, 5, 4); 时 是示例的情况 :
         Cross Node:4
(2)CreateCrossLinkList(link1, link2, 0, 5, 4); 时 是不相交的情况:
         There is no cross node

原创粉丝点击