【发布时间】:2014-04-04 04:32:21
【问题描述】:
我即将创建一个可以插入和显示到现在的链接:
struct Node {
int x;
Node *next;
};
这是我的初始化函数,只会为第一个 Node 调用:
void initNode(struct Node *head, int n){
head->x = n;
head->next = NULL;
}
添加Node,我认为我的链表不能正常工作的原因在于这个函数:
void addNode(struct Node *head, int n){
struct Node *NewNode = new Node;
NewNode-> x = n;
NewNode -> next = head;
head = NewNode;
}
我的main 功能:
int _tmain(int argc, _TCHAR* argv[])
{
struct Node *head = new Node;
initNode(head, 5);
addNode(head, 10);
addNode(head, 20);
return 0;
}
让我按照我认为可行的方式运行该程序。首先,我将头部 Node 初始化为 Node,如下所示:
head = [ 5 | NULL ]
然后我添加一个 n = 10 的新节点并将 head 作为我的参数传递。
新节点 = [ x | next ] next 指向头部。然后我改变了head指向NewNode的位置,因为NewNode现在是LinkedList中的第一个Node。
为什么这不起作用?我将不胜感激任何可以使我朝着正确方向前进的提示。我觉得 LinkedList 有点难理解。
当我打印这个时,它只返回 5:
【问题讨论】:
-
更多的是 C 而不是 C++。您应该将链表封装在一个类中。并且指针
Node *head应该是类内部的私有成员变量,直接指向第一个节点(实际的方式是你必须为指向下一个元素的一个虚拟节点分配内存。所以你浪费内存,逻辑更复杂并且不代表模型的想法)。如果您需要一些示例代码,请告诉我。 -
你能给我举个例子吗?
标签: c++ linked-list