簡體   English   中英

創建和顯示鏈接列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM