繁体   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