LinkedList:为什么需要声明一个新的结构节点当前?如果我使用参数头进行跟踪,代码工作得很好吗?
LinkedList: Why there is need to declare a new struct node current? The code works perfectly fine if I use the argument head for tracking?
int Count(struct node* head, int searchFor) {
struct node* current = head;
int count = 0;
while (current != NULL) {
if (current->data == searchFor)
count++;
current = current->next;
}
return count;
}
为什么需要声明当前结构节点?如果我们使用在参数列表中传递的 head,我们会得到相同的结果。
int Count(struct node* head, int searchFor) {
int count = 0;
while(head != NULL) {
if (head->data == searchFor) {
count ++;
}
head = head->next;
}
return count;
}
这背后的概念是什么?这只是为了干净的代码还是其他原因?
当然是"same",他们"pointing"到开头相同的位置。
struct node* current = head;
但是在您将当前项目更改为下一个项目后,它们不再指向相同的项目。
current = current->next;
在这之后你的 current 不再和 head 一样了,如果你需要重新启动,你仍然可以在 head 指针中引用 head。
关键是你在阅读"head"时所期望的,你期望它指向head item,对吧?如果您更改它会使您的代码对最终维护它的其他程序员造成混淆。
如果您不再需要在此函数中使用 head,我建议将您的参数重命名为 current(但有一个指向 head 的指针总是好的在某个地方)。
int Count(struct node* current, int searchFor) {
int count = 0;
while(current != NULL) {
if (current->data == searchFor) {
count ++;
}
current = current->next;
}
return count;
}
通常这样做是为了保留传递给函数的原始值 (head
),因为 current
正在被修改,如果您修改 [=10],您将永久丢失原始指针=] 直接。但是在您的情况下,是否使用额外的临时 current
没有区别,因为 Count()
中不再需要 head
。
这真的是品味问题。我个人更喜欢使用带有 current
的版本,因为我觉得使用 "current" 比直接修改 "head" 更具可读性。
对于您展示的代码,这背后只有一个概念:使代码更具可读性。:)
当您看到头部发生变化时,您必须更加注意并确保代码正确。这比理解代码需要更多时间。:)
然而,第一个代码片段有一个缺点。变量 current 在不使用它的代码块中声明。我会按以下方式编写代码
int Count( const struct node* head, int searchFor )
{
int count = 0;
for ( const struct node* current = head; current != NULL; current = current->next )
{
if ( current->data == searchFor ) count++;
}
return count;
}
int Count(struct node* head, int searchFor) {
struct node* current = head;
int count = 0;
while (current != NULL) {
if (current->data == searchFor)
count++;
current = current->next;
}
return count;
}
为什么需要声明当前结构节点?如果我们使用在参数列表中传递的 head,我们会得到相同的结果。
int Count(struct node* head, int searchFor) {
int count = 0;
while(head != NULL) {
if (head->data == searchFor) {
count ++;
}
head = head->next;
}
return count;
}
这背后的概念是什么?这只是为了干净的代码还是其他原因?
当然是"same",他们"pointing"到开头相同的位置。
struct node* current = head;
但是在您将当前项目更改为下一个项目后,它们不再指向相同的项目。
current = current->next;
在这之后你的 current 不再和 head 一样了,如果你需要重新启动,你仍然可以在 head 指针中引用 head。
关键是你在阅读"head"时所期望的,你期望它指向head item,对吧?如果您更改它会使您的代码对最终维护它的其他程序员造成混淆。
如果您不再需要在此函数中使用 head,我建议将您的参数重命名为 current(但有一个指向 head 的指针总是好的在某个地方)。
int Count(struct node* current, int searchFor) {
int count = 0;
while(current != NULL) {
if (current->data == searchFor) {
count ++;
}
current = current->next;
}
return count;
}
通常这样做是为了保留传递给函数的原始值 (head
),因为 current
正在被修改,如果您修改 [=10],您将永久丢失原始指针=] 直接。但是在您的情况下,是否使用额外的临时 current
没有区别,因为 Count()
中不再需要 head
。
这真的是品味问题。我个人更喜欢使用带有 current
的版本,因为我觉得使用 "current" 比直接修改 "head" 更具可读性。
对于您展示的代码,这背后只有一个概念:使代码更具可读性。:)
当您看到头部发生变化时,您必须更加注意并确保代码正确。这比理解代码需要更多时间。:)
然而,第一个代码片段有一个缺点。变量 current 在不使用它的代码块中声明。我会按以下方式编写代码
int Count( const struct node* head, int searchFor )
{
int count = 0;
for ( const struct node* current = head; current != NULL; current = current->next )
{
if ( current->data == searchFor ) count++;
}
return count;
}