算法问题

问题1:找到链表的倒数第n个节点(链表)。

    解1:先遍历链表得到链表的长度M,再遍历链表得到第M-n+1个节点。

    解2:使用两个指针p1、p2。首先两个指针都指向表头节点。p1先单独进行n次移动,再p1、p2一起移动,直至p1移动到链表尾。


问题2:判定给定的链表是以Null结尾,还是形成一个环(链表)。

    解1:借助散列表。1)从表头节点开始,遍历每个节点。2)对于每个节点,检查该节点的地址是否在散列表中。3)如果在,表示当前节点已经访问过了,链表中存在环。4)如果不在,则把该地址插入散列表中。5)重复上述过程,直至到达表尾或找到环。

    解2:Floyd环判定算法。使用两个在链表中移动速度不同的指针。一旦它们进入环就会相遇。


问题3:如果链表中存在环,找到环的起始节点。

    解:使用两个在链表中移动速度不同的指针pSlow、pFast。一旦它们进入环就会相遇。此时,初始化pSlow的值,使其指向链表的表头节点。然后pSlow、pFast从各自的位置开始沿着链表移动,每次均移动一个节点。它们相遇的位置就是环的开始节点。 解释 !!!!!!!!





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值