我是C ++的初学者,需要很多帮助。好吧,首先,我一直在研究Linked List,并没有真正理解为什么我的标题(指向第一个节点的第一个指针)继续旋转。我只是指向第一个节点加上我的显示节点只显示最后一个节点,为什么会这样?请告诉我我错在哪里。提前谢谢
#include <iostream>
#include <conio.h>
using namespace std;
struct Node
{
int data;
Node *link;
};
Node* create_Node()
{
int no_of_nodes;
Node *header = new Node;
Node *ptr = new Node;
header = ptr;
cout << "Enter no of nodes:";
cin >> no_of_nodes;
cout << "Enter data:";
for(int n = 0; n < no_of_nodes; n++)
{
cin >> ptr->data;
Node *temp = new Node;
ptr->link = temp;
temp = ptr;
}
ptr->link = NULL;
return ptr;
}
void display_link_list(Node * list)
{
Node *temp = new Node;
temp = list;
while(temp != NULL)
{
if(temp->link != NULL)
{
cout << "List:" << list->data << endl;
temp = temp->link;
}
}
}
int main()
{
Node *n = new Node;
n = create_Node();
display_link_list(n);
getch();
return 0;
}
答案 0 :(得分:1)
欢迎使用C ++。我的建议是将Linked list
分成两部分。首先是节点,然后是List结构。
struct Node
{
int data;
Node *next;
Node(int data) : data(data), next(NULL) {}
};
struct List {
Node* tail;
Node* head;
List() : head(NULL), tail(NULL) {}
void insert(int data) {
if(head==NULL) {
head = new Node(data);
tail = head;
} else {
tail->next = new Node(data);
tail = tail->next;
}
}
};
现在您可以一次在列表中插入一个元素,并使用head
从头到尾打印列表。
答案 1 :(得分:0)
您需要了解的基本内容:
执行Node* p = new Node
时,您将变量p
设置为指向一块内存的起始地址,其大小等于sizeof(Node)
。
现在,当您执行p = something else
(通常出现在您的代码中)时,您基本上会覆盖先前的p
值以及其他值。这就像在做:
int i = 5;
i = 6;
所以你的代码没有按照你期望的那样开始。
除此之外,在这种情况下用第二个值覆盖第一个值的坏处是,第一个值是动态分配的内存块的地址,您需要{{1在程序的稍后部分。一旦你使用delete
来存储不同的值,你就不再“记住”那个地址,因此你不能p
那段记忆。
因此,您应首先在以下每个位置修复此问题:
delete