链接列表查找长度 - 这两个函数之间的差异是什么?

时间:2011-09-11 22:14:50

标签: c linked-list

这两个功能有什么区别吗?我的意思是返回的结果?

int Length(struct node* head) {
  struct node* current = head;
  int count = 0;

  while (current != NULL) {
    count++;
    current = current->next;
  }

  return count;
}

和这个功能

int Length(struct node* head) {
  int count = 0;

  while (head != NULL) {
    count++;
    head = head->next;
  }

  return count;
}

3 个答案:

答案 0 :(得分:6)

他们是一样的。一个使用本地“当前”变量迭代列表,而另一个使用通过函数参数接收的相同变量。

答案 1 :(得分:0)

返回的值将是相同的。

前者是由订阅样式规则的程序员编写的一种代码,该规则说“修改参数是不好的做法,因为它们是按值传递的,并且会让读者误认为函数会修改相应的参数。“

不一定是坏建议。然而,它使代码更长一点,但它读得更好。很多读者都会看到第二个并且初步反应是“等等,什么?换头?哦......好吧,不管它是安全的......”

答案 2 :(得分:0)

没有区别。第二个版本只是使用函数参数本身作为变量在体内工作,这是完全合法的。事实上,它甚至比制作无偿副本的第一版更有效率。

如果参数被声明为const,你不能使用第二个版本,即int Length(struct node* const head) - 但由于它不是,你可以自由地使用参数变量。