[英]Create and Display Linked List
我是C ++的初學者,需要很多幫助。 好吧,對於初學者來說,我一直在研究鏈表,但並沒有真正理解為什么我的標頭(指向第一個節點的第一個指針)繼續旋轉。 我只是將其指向第一個節點,而我的顯示節點只是顯示最后一個節點,為什么呢? 請告訴我我錯了。 先感謝您
#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;
}
歡迎使用C ++。 我的建議是將“ Linked 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
從頭到尾打印列表。
您需要了解的一些基本知識:
當您執行Node* p = new Node
,您正在將變量p
設置為指向一塊內存的起始地址,該內存的大小等於sizeof(Node)
。
現在,當您隨后執行p = something else
(通常出現在代碼中)時,實際上是在用其他值覆蓋p
的先前值。 這就像在做:
int i = 5;
i = 6;
因此,您的代碼無法實現您期望的開始。
除此之外,在這種情況下用第二個值覆蓋第一個值的缺點是,第一個值是動態分配的內存的地址,您需要在以后的某個時間delete
。您的程序。 而且,一旦使用p
存儲了一個不同的值,就不再“記住”該地址,因此無法delete
該內存。
因此,您應該首先在以下每個位置解決此問題:
Node *header = new Node; // Variable 'header' is assigned
header = ptr; // Variable 'header' is reassigned
Node *temp = new Node; // Variable 'temp' is assigned
temp = list; // Variable 'temp' is reassigned
Node *n = new Node; // Variable 'n' is assigned
n = create_Node(); // Variable 'n' is reassigned
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.