在我休息了一段时间后,我继续学习链表。我正在使用 Dev C++ 并在代码方面遇到一些问题。这是代码,我从此处链接引用了此代码!
#include <stdio.h>
#include <stdlib.h>
struct node //Definition of a Node
{
int data;
struct node *next;
};
struct node* build3nodes() //Create nodes and allocate memory
{
struct node* first = NULL;
struct node* second = NULL;
struct node* third = NULL;
first = malloc(sizeof(struct node));
second = malloc(sizeof(struct node));
third = malloc(sizeof(struct node));
first->data = 1;
first->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
return first;
}
unsigned char length(struct node* head) //Get the number of nodes
{
unsigned char count = 0;
struct node* current = head;
if(current!=NULL)
{
count ++;
current = current->next;
}
return count;
}
int main()
{
unsigned char len = 0;
struct node* head1 = NULL;
head1 = build3nodes();
len = length(head1);
printf("Length is %d",len);
}
当我编译并运行这个程序时,我得到的输出长度为 1,而我必须得到 3,因为存在 3 个节点。在调试模式下,我在检查添加到监视的变量时遍历了每一行,我注意到,即使函数 length() 中的变量电流不等于 NULL,但它退出 while 循环,同时将计数增加 1。因此,基本上,count 变量应该递增到 3,直到它到达下一个字段指向 NULL 的第 3 个节点。但这并没有发生,我不明白我做错了什么。关于这方面的任何建议和帮助都会很棒。提前谢谢大家!
亲切问候~VD
这是一个简单的解决方法,你现在在长度内有一个条件而不是一个循环。因此,如果条件为真,它只会经历一次。相反,您要做的是将其更改为 while 循环条件,这将使您能够遍历整个链表,直到看到 NULL。
所以改变
if current != NULL
到while (current != NULL)