【问题标题】:Can someone explain to me how this loop works within function only?有人可以向我解释这个循环是如何只在函数内工作的吗?
【发布时间】:2016-11-13 06:00:51
【问题描述】:

正在研究一些链表,但不确定这个循环如何处理作业。

该代码旨在查找两个链表的交集。

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    ListNode *cur1 = headA, *cur2 = headB;
    while(cur1 != cur2){
        cur1 = cur1 ? cur1->next : headB;
        cur2 = cur2 ? cur2->next : headA;
    }
    return cur1;
}

我不确定cur1 = cur1 是如何使用赋值而不是布尔条件进行评估的。我了解迭代的工作原理,但不确定为什么我不能这样做:

while(cur1 != cur2){
    cur1 = cur1->next;
    cur2 = cur2->next;
}
return cur1;

我很确定我最终会遇到运行时错误。

【问题讨论】:

  • "有人可以向我解释一下 if else 循环是如何工作的吗?" - 您的代码中没有任何if..else
  • cur1 = cur1 不是它所说的。它说cur1 = ( cur1 ? cur1->next : headB ); ... 换句话说,它在取消引用之前检查cur1 是否为空。在您的第二个 while 循环中,如果 cur1cur2 为空,您将崩溃。
  • 啊,这实际上很有帮助,因为除非我使用它,否则我在编译程序时遇到问题,谢谢! @par
  • 那个? : 是一个条件(三元)运算符。因此,如果 cur1->next 有值,则 cur1 = cur1->next 否则 it = headA,headB 分别。
  • 这可能会有所帮助:stackoverflow.com/questions/23415957/…

标签: c++ linked-list intersection


【解决方案1】:
cur1 = cur1?cur1->next:headB;

是三元运算符。它在尝试“移动到下一个节点”之前检查cur1 是否为空 相当于:

if (cur1 != null){cur1 = cur1->next;}
else {cur1 = headB;}

您提出的版本的问题是,如果cur1 恰好为空,您将得到分段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多