2017-08-25 100 views
-4

我在leetcode解决方案中看到了以下代码片段。它计算链接列表中元素的数量。 while语句只有一个赋值操作。任何人都可以解释它如何工作。奇怪的while循环与赋值操作C++

/** 
* Definition for singly-linked list. 
* struct ListNode { 
*  int val; 
*  ListNode *next; 
*  ListNode(int x) : val(x), next(NULL) {} 
* }; 
*/ 

struct ListNode * temp = head; 
int num = 1; 
while(temp = temp->next){ 
    num++; 
} 
+11

C++赋值是表达式,赋值为赋值... –

+0

@ juanpa.arrivillaga看起来一个体面的答案。 – Yunnosch

回答

2
  1. temp->next的值被分配给temp
  2. while(temp)进行评估(如temp != NULL
  3. 万一循环体被执行

注意:如果head是NULL您程序将面临运行时错误

+1

可能值得添加一个1.5,说明你正在查看'while(temp)',因为赋值会被赋值为已分配的值(这是新的temp或'temp-> next',具体取决于你的方式看着它)。 – scohe001

+1

如果'head'为NULL,则行为未定义。它可能会或可能不会导致运行时错误。 – Peter

+0

@彼得,好点,我的坏 –