使链表打印出数字

3

我想要让用户提供数字并将它们填充到一个链表中,然后再将它们打印出来。然而,我的实现方式只会打印出第一个输入的数字。我是在链表头插入的,你能帮我找出问题所在吗?

struct Node 
{
  int data; 
  Node* next;
};

Node newNode(int num, Node *next_node)
{
    Node node;
    node.data = num;
    node.next = next_node;
    return node;
}

void headInsert(Node* head, int num)
{
    Node* tmp;  
    tmp  = new Node;
    tmp->data = num;
    tmp->next = head;
    head = tmp;
}

int main(int argc, char* argv[])
{

    if (argc < 2)
    {
        std::cout<< "No input for linked list!! \n" <<
                    "Usage: ./linkedlist 2 3 567 12 .. etc."
                 <<"\n";
        return 0;
    }

    Node *head, *temp;
    head = new Node;
    head->data = atoi(argv[1]);
    head->next = NULL;

    headInsert(head, atoi(argv[2]));
    headInsert(head, atoi(argv[3]));

    temp = head;

    while(temp != NULL) 
    {
        std::cout << temp->data<< " ";
        temp = temp->next;
    }

        return EXIT_SUCCESS;
    }

既然这被标记为 C++,为什么你不使用它呢?我不仅指 std::list,而是为什么不以面向对象的方式实现你的列表/节点结构?使用没有成员函数的 struct,并使用自由函数来修改它非常类似于 C。如果这是你自己的练习,我至少部分理解。但我祈祷这不是今天 C++ 课程的状态。 - Chad
可能是链表插入导致循环的重复问题 - Jerry Coffin
1
这是学校课程的状态,我认为这是一件好事。当你只理解std::list时,上帝帮助你调试问题。在使用不需要知识的免费方式之前,您应该了解如何使用指针制作自己的列表。话虽如此,在生产代码中,您应该绝对使用std::实现。 - John Humphreys
但是这段代码如何为学生实际使用C++做准备呢?为什么不教如何将其实现为具有成员函数的对象?为什么C++课程不会在“Hello World”之后立即开始讲解构造函数/析构函数呢? - Chad
1个回答

5
headInsert()函数中,head = tmp; 只改变了本地变量head
你可以将其作为指向指针的引用传递,即 Node*& head

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接