努力追求可能 2022-10-28 20:25 采纳率: 66.7%
浏览 17
已结题

两个单链表相交的起始节点

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

根据快慢法则,走的快的一定会追上走得慢的。
有的链表短,他走完了就去走另一条链表,我们可以理解为走的快的指针。
那么,只要其中一个链表走完了,就去走另一条链表的路。如果有交点,他们最终一定会在同一个
位置相遇

    if headA is None or headB is None: 
        return None
    cur_a, cur_b = headA, headB     # 用两个指针代替a和b


    while cur_a != cur_b:
        cur_a = cur_a.next if cur_a else headB      # 如果a走完了,那么就切换到b走
        cur_b = cur_b.next if cur_b else headA      # 同理,b走完了就切换到a

    return cur_a

疑问:if cur_a else headB 这是什么意思? 我没见过这种 if_else 为什么可以代表 a与b的切换

  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-10-28 21:21
    关注

    cur_a = cur_a.next if cur_a else headB 等价于
    if cur_a:
    cur_a = cur_a.next
    else:
    cur_a = headB
    不过话说回来,你这代码是假定两个链表必定相交且不等长,然后去找交点。倘若两个链表不相交,或者等长,则一直是死循环啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度