Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';链表开头为零的原因是什么?C++; #包括 使用名称空间std; 结构节点{ int数据; 节点*下一步; }; void add(结构节点*head,int n){ Node*newNode=新节点; newNode->data=n; newNode->next=NULL; 节点*cur=头部; while(cur){ 如果(当前->下一步==NULL){ cur->next=newNode; 返回; } cur=cur->next; } } 无效显示(结构节点*头部){ 节点*列表=头; while(列表){ 下一步是收集数据; } cout_C++_Linked List_Output_Nodes - Fatal编程技术网

C++ 什么';链表开头为零的原因是什么?C++; #包括 使用名称空间std; 结构节点{ int数据; 节点*下一步; }; void add(结构节点*head,int n){ Node*newNode=新节点; newNode->data=n; newNode->next=NULL; 节点*cur=头部; while(cur){ 如果(当前->下一步==NULL){ cur->next=newNode; 返回; } cur=cur->next; } } 无效显示(结构节点*头部){ 节点*列表=头; while(列表){ 下一步是收集数据; } cout

C++ 什么';链表开头为零的原因是什么?C++; #包括 使用名称空间std; 结构节点{ int数据; 节点*下一步; }; void add(结构节点*head,int n){ Node*newNode=新节点; newNode->data=n; newNode->next=NULL; 节点*cur=头部; while(cur){ 如果(当前->下一步==NULL){ cur->next=newNode; 返回; } cur=cur->next; } } 无效显示(结构节点*头部){ 节点*列表=头; while(列表){ 下一步是收集数据; } cout,c++,linked-list,output,nodes,C++,Linked List,Output,Nodes,您的代码有几个问题: 分配head节点时,您没有为其数据成员分配任何值,因此在您的情况下,它持有一个碰巧为0的随机值。并且您也没有初始化其下一个成员,这意味着添加()和显示()将无法正常工作 在add()中,如果head为NULL,则不会将任何节点添加到列表中(您不会将调用方的节点*变量更新为指向新节点),并且泄漏分配的新节点 从main()退出时,您正在泄漏所有分配的节点 请尝试以下方法: #include <iostream> using namespace std;

您的代码有几个问题:

  • 分配
    head
    节点时,您没有为其
    数据
    成员分配任何值,因此在您的情况下,它持有一个碰巧为0的随机值。并且您也没有初始化其
    下一个
    成员,这意味着
    添加()
    显示()
    将无法正常工作

  • add()
    中,如果
    head
    为NULL,则不会将任何节点添加到列表中(您不会将调用方的
    节点*
    变量更新为指向新节点),并且泄漏分配的
    新节点

  • main()
    退出时,您正在泄漏所有分配的节点

  • 请尝试以下方法:

    #include <iostream>    
    
    using namespace std;
    
    struct Node {
        int data;
        Node* next;
    };
    
    void add(struct Node *head, int n) {
        Node *newNode = new Node;
        newNode->data = n;
        newNode->next = NULL;
        Node *cur = head;
        while(cur) {
            if(cur->next == NULL) {
                cur->next = newNode;
                return;
            }
    
            cur = cur->next;
        }
    }
    
    void display(struct Node *head) {
        Node *list = head;
        while(list) {
            cout << list->data << " ";
            list = list->next;
        }
        cout << endl;
        cout << endl;
    }
    
    int main()
    {
        struct Node *newHead;
        struct Node *head = new Node;
        int ar[]={2,5,46,7,55};
        for(int i=0; i<5;i++){
            add(head,ar[i]);
        }
        display(head);
    }
    

    main
    中,分配
    Node
    的未初始化实例,并将指针存储在
    head
    中。您从不分配该节点的
    head->data
    ,因此该值是不确定的。对于
    head->next
    ,同样适用。当在
    add
    display
    中读取这些值时程序未定义


    我怎样才能修好它

    首先,在
    main
    中初始化
    head
    ,以避免未定义的行为:

    #include <iostream>
    #include <list>
    
    void display(const std::list<int> &mylist) {
        for(std::list<int>::const_iterator iter = mylist.begin(); iter != mylist.end(); ++iter) {
            std::cout << *iter << " ";
        }
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    int main()
    {
        std::list<int> mylist;
        int ar[] = {2, 5, 46, 7, 55};
        for(int i = 0; i < 5; ++i){
            mylist.push_back(ar[i]);
        }
    
        /* or:
        int ar[] = {2, 5, 46, 7, 55};
        std::list<int> mylist(ar, ar+5);
        */
    
        display(mylist);
        return 0;
    }
    
    然后你可以做以下一件事:

    a) 使用
    display(head->next);
    而不是
    display(head);

    b) 将
    初始化为所需的第一个值

    Node *head = new Node();
    //                   ^^ these are important
    
    head->data=ar[0];
    
    对于(int i=1;i<代码>头<代码>也有一个单位化值。在将<代码>结构> <代码>命名为C++类型时,不需要指定<代码>结构>代码>。你的老师似乎被困在了90年代。你应该用一本好的C++书来补充这门课。噢,对头脑来说,另一个间接的水平是不是更容易让它通过引用?@ SCOHE01:当使用函数参数时,引用仍然是间接的。大多数编译器实现引用。不管怎样,我还是使用了指针。但是不管怎样,我更新了我的示例。
    Node *head = new Node();
    //                   ^^ these are important
    
    head->data = ar[0];
    for(int i=1; i<5;i++)
    // ...