链接列表不适用于c ++

时间:2016-08-24 23:04:59

标签: c++ linked-list

所以我试图获取链表,这是我的代码到目前为止。当我在列表前面添加一个节点时,一切看起来都很好,但是当我尝试在后面添加我的第一个节点时,我的代码会编译但返回-1。我不确定它有什么问题,但我知道它在insertBack()函数中。顺便说一句,如果有任何其他错误让我知道,这是我第一次尝试链表! 谢谢!

#include "LinkedList.h"
#include <iostream>
#include <stddef.h>

LinkedList::LinkedList()
{
    head=NULL;
    length=0;
}

void LinkedList::InsertFront(int item)
{
    Node *temp = new Node;
    temp->data = item;
    temp->next = head;
    head = temp;
    length++;
}

void LinkedList::InsertBack(int item)
{
    Node *temp1 = new Node;
    temp1 = head;

    while(temp1->next != NULL)
    {
        temp1 = temp1->next;
    }
    Node *temp = new Node;
    temp->data = item;
    temp->next = NULL;
    temp1->next = temp;

    length++;
}

void LinkedList::MakeEmpty()
{
    Node *temp;
    while(head!= NULL)
    {
        temp = head;
        head = head->next;
        delete temp;
    }
    length;
}

void LinkedList::ShowItems()
{
    Node *temp = head;
    while(temp != NULL)
    {
        std::cout<<temp->data<<std::endl;
        temp = temp->next;
    }
}


LinkedList::~LinkedList()
{
    MakeEmpty();
}

1 个答案:

答案 0 :(得分:1)

确保在引用之前已经分配了头部。当你运行InsertBack时,这是你问题的最可能的来源,这取决于已经初始化head,因为它遍历列表中从第一个开始的所有元素,但假设已经分配了第一个元素。

它还会进行不必要的内存分配 - 它会创建一个新的Node,然后立即写入指向它的东西,那么重点是什么?

 Node *temp1 = new Node;
 temp1 = head;