typedef struct n {
int data;
struct n *next;
}node;
此函数删除所有具有奇数值的节点(不释放内存或其他变量):
void deleteOdds (node **head) {
if (*head == NULL) {
return;
}
while ((*head)->next) {
if ((*head)->data % 2 != 0) {
*head = (*head)->next;
} else head = &(*head)->next;
}
}
我理解逻辑(并且已经有了一些假设),但我不确定如何解释两者之间的区别
*head =(*head)->next;
和
head = &(*head)->next;
提前致谢!
最佳答案
了解正在发生的事情的关键是查看每种情况下分配的内容:
*head = (*head)->next;
分配给head
指向的任何内容,它是原始头指针,传递给的指针到函数,或某个先前节点的next
。我们修改指向的内容,而指针保持不变。这相当于从列表中删除(并在此过程中造成内存泄漏)。head = &(*head)->next
分配给head
本身,即它修改指针,而不是它指向的东西。这相当于在列表中跳过,而不修改它。
注意: head
不是变量的理想名称。由于变量仅指向 head
指针直到第一个“skip”,因此更好的名称是 current
。
关于c - C [链接列表]中 (*head)->next 和 &(*head)->next 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315893/