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

[问题]:

基于顺序表长度计算的相关定位算法
要定位两条链表中交叉结点的位置: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值