在链表程序中获取节点的长度



在我休息了一段时间后,我继续学习链表。我正在使用 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 != NULLwhile (current != NULL)

相关内容

  • 没有找到相关文章

最新更新