C++ 创建链接列表

C++ 创建链接列表,c++,data-structures,linked-list,c++14,C++,Data Structures,Linked List,C++14,因此,我必须为我的项目建立一个链表,以添加和乘以非常大的数字。但是我在创建链接列表时遇到了问题。我必须得到一些输出,但我不能。我找不到问题。它没有给出一个错误,但我也不能得到任何输出。我比较了我能找到的链表示例,但仍然找不到问题所在 #include<iostream> #include<fstream> #include<string> using namespace std; struct LLnode{ int data; struc

因此,我必须为我的项目建立一个链表,以添加和乘以非常大的数字。但是我在创建链接列表时遇到了问题。我必须得到一些输出,但我不能。我找不到问题。它没有给出一个错误,但我也不能得到任何输出。我比较了我能找到的链表示例,但仍然找不到问题所在

#include<iostream>
#include<fstream>
#include<string>

using namespace std;

struct LLnode{
    int data;
    struct LLnode *next;
    LLnode (int);
};

LLnode::LLnode(int value){
    data = value;
    next = NULL;
}

class LinkedList{
private:
        LLnode *head, *tail, *temp;
public:
    LinkedList(){
        head = NULL;
        tail = NULL;
    }
    ~LinkedList();
    void createLLnode(int value);
    void display();
    void addToHead(int value);
    void deleteHead();
};

void LinkedList::createLLnode(int value){
    temp -> data = value;
    temp -> next = NULL;
    if(head == NULL){
        head = temp;
        tail = temp;
        temp = NULL;
    }
    else {
        tail -> next = temp;
        tail = temp;
    }
};

void LinkedList::display(){
    temp = head;
    while(temp != NULL){
        cout << temp->data << "\n";
        temp = temp -> next;
    }
};

void LinkedList::addToHead(int value){
    temp ->data = value;
    temp -> next = head;
    head = temp;
};

void LinkedList::deleteHead(){
    temp = head;
    head = head -> next;
    delete temp;
};

int main(){
    LinkedList* myList = new LinkedList();

    myList->createLLnode(8);
    myList->addToHead(12);
    myList->display();
    myList->deleteHead();
    myList->display();
    myList->addToHead(46);
    myList->addToHead(17);
    myList->display();

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
结构LLnode{
int数据;
结构LLnode*next;
LLnode(int);
};
LLnode::LLnode(int值){
数据=价值;
next=NULL;
}
类链接列表{
私人:
LLnode*头部,*尾部,*温度;
公众:
LinkedList(){
head=NULL;
tail=NULL;
}
~LinkedList();
void createLLnode(int值);
void display();
void addToHead(int值);
void deleteHead();
};
void LinkedList::createLLnode(int值){
温度->数据=值;
temp->next=NULL;
if(head==NULL){
压头=温度;
尾=温度;
温度=零;
}
否则{
尾部->下一步=温度;
尾=温度;
}
};
void LinkedList::display(){
温度=水头;
while(temp!=NULL){
下一步是收集数据;
}
};
void LinkedList::addToHead(int值){
温度->数据=值;
温度->下一步=头部;
压头=温度;
};
void LinkedList::deleteHead(){
温度=水头;
头部=头部->下一步;
删除临时文件;
};
int main(){
LinkedList*myList=新建LinkedList();
myList->createLLnode(8);
myList->addToHead(12);
myList->display();
myList->deleteHead();
myList->display();
myList->addToHead(46);
myList->addToHead(17);
myList->display();
返回0;
}

LLnode*头、*尾、*温度都是指针。这对于
head
tail
来说很好,但是您似乎使用了错误的
temp
,因为您从未为节点分配任何内存

在函数
void LinkedList::createLLnode(int-value)
中,将值分配给
temp
,但不创建新对象。函数的第一行应为

void LinkedList::createLLnode(int value) {
    temp = new LLnode;
    ...

然后,在
链接列表
析构函数中,必须添加在链接列表中迭代的代码,并
删除
s所有节点。

LLnode*head、*tail、*temp都是指针。这对于
head
tail
来说很好,但是您似乎使用了错误的
temp
,因为您从未为节点分配任何内存

在函数
void LinkedList::createLLnode(int-value)
中,将值分配给
temp
,但不创建新对象。函数的第一行应为

void LinkedList::createLLnode(int value) {
    temp = new LLnode;
    ...

链接列表
析构函数中,您必须添加迭代链接列表的代码,并
删除所有节点。

“它不会给出任何错误”分段错误对我来说是一个相当大的错误。提示:您有一个
delete
,但您从未在
LinkedList
中使用任何
new
。第一个
createLLnode
调用通过访问未初始化的变量
temp
来显示未定义的行为,这是编写自己的链接列表的要求,还是仅仅为了添加和乘以真正大的数字?如果你不必写你自己的链表,那么如果你真的想使用列表或最好是“代码> STD::矢量< /COD>”,请考虑使用<代码> STD:List< <代码>。<代码> TEMP不应该是你的类的成员。BTW,在C++中,当声明结构变量时不需要使用<代码> Stutt。分割错误对我来说是个很大的错误。提示:您有一个
delete
,但您从未在
LinkedList
中使用任何
new
。第一个
createLLnode
调用通过访问未初始化的变量
temp
来显示未定义的行为,这是编写自己的链接列表的要求,还是仅仅为了添加和乘以真正大的数字?如果您不必编写自己的链表,那么考虑使用<代码> STD:List< <代码> >如果您真的想要使用列表,或者最好是<代码> STD::vector < /COD> > <代码> TEMP不应该是您的类的成员。在C++中,在声明结构变量时不需要使用<代码>结构> /COD>。它应该是使用它的函数的局部变量。值得一提的是,
temp
不应该是成员变量。它应该是使用它的函数的本地。