【发布时间】: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循环中,如果cur1或cur2为空,您将崩溃。 -
啊,这实际上很有帮助,因为除非我使用它,否则我在编译程序时遇到问题,谢谢! @par
-
那个? : 是一个条件(三元)运算符。因此,如果 cur1->next 有值,则 cur1 = cur1->next 否则 it = headA,headB 分别。
标签: c++ linked-list intersection