C++ 将值添加到链表的末尾,并从前面的c++;

C++ 将值添加到链表的末尾,并从前面的c++;,c++,linked-list,C++,Linked List,我正在尝试将项目添加到列表的末尾,并将其从列表的开头删除。当我尝试添加项目时,程序会编译但会崩溃。我对这个概念还不熟悉,需要一些时间才能完全适应。谢谢你的帮助。。 谢谢 #包括 使用名称空间std; 结构myNode { int-val; 结构myNode*next; }; 类Cll { 公众: myNode*head=新的myNode; myNode*tail=新的myNode; Cll() { head=NULL; tail=NULL; } myNode*创建阳极(int值) { myNod

我正在尝试将项目添加到列表的末尾,并将其从列表的开头删除。当我尝试添加项目时,程序会编译但会崩溃。我对这个概念还不熟悉,需要一些时间才能完全适应。谢谢你的帮助。。 谢谢

#包括
使用名称空间std;
结构myNode
{
int-val;
结构myNode*next;
};
类Cll
{
公众:
myNode*head=新的myNode;
myNode*tail=新的myNode;
Cll()
{
head=NULL;
tail=NULL;
}
myNode*创建阳极(int值)
{
myNode*temp;
temp=新的myNode;
温度->值=值;
temp->next=NULL;
返回温度;
}
void addingValues()
{
智力麻木;
库特努姆;
myNode*temp,*p;
温度=创建阳极(无编号);
p=水头;
p=p->next;
temp->next=NULL;
p->next=温度;
}
void deletingValues()
{
myNode*s;
s=头部;
head=s->next;
}
void showValues()
{
结构myNode*temp2;
temp2=头部;
while(temp2)
{

CUT

你是C++编程,所以我建议使用<强> STD::列表>/P> 但是如果你想自己做,并且你想在你喜欢的单子列表前面添加一个节点,你首先要检查它是否是第一个节点。 如果它是第一个节点,则新节点是

头部
尾部
。如果不是,则新节点是头部,其后续节点是列表中的旧头部。调整代码如下:

void addingValues()
{
    int numb;
    cout << "Enter the number to be added: ";
    cin >> numb;
    myNode  *newNode = createAnode(numb);

    if ( head == NULL ) // if list is empty the new node is the head and the tail
    {
        head = tail = newNode;
        return;
    }

    tail->next = newNode; // successor of last node is new node and new node is tail
    tail = newNode;
}

你是C++编程,所以我建议使用<强> STD::List./P> 但是如果你想自己做,并且你想在你喜欢的单子列表前面添加一个节点,你首先要检查它是否是第一个节点。 如果它是第一个节点,则新节点是

头部
尾部
。如果不是,则新节点是头部,其后续节点是列表中的旧头部。调整代码如下:

void addingValues()
{
    int numb;
    cout << "Enter the number to be added: ";
    cin >> numb;
    myNode  *newNode = createAnode(numb);

    if ( head == NULL ) // if list is empty the new node is the head and the tail
    {
        head = tail = newNode;
        return;
    }

    tail->next = newNode; // successor of last node is new node and new node is tail
    tail = newNode;
}

你忘了告诉我们你调试程序时发现了什么。在
添加值
p=head;p=p->next;
-->
head
为空,你在一个空对象上访问
next
。但是还有很多地方看起来不对劲。学习如何使用调试器。听起来你可能需要学习如何使用debugger逐步检查您的代码。有了一个好的调试器,您可以逐行执行您的程序,看看它偏离了您的预期。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:加上您的addingvalue和deletingvalue似乎有许多逻辑缺陷。p=p->next不会给您最后的结果列出列表中的第二个元素。这就是您想要的吗?如果您的head元素没有定义,您希望发生什么?这些函数是如何调用的?您的构造函数将
head
tail
设置为
NULL
是一个问题。这不仅是因为以后访问
p->next
无效,还因为你泄漏了你分配给类内成员初始值设定项的内存。你忘了告诉我们你在调试程序时发现了什么。在
添加值
p=head;p=p->next;
-->
head
为空,你在一个空对象上访问
next
。但是还有很多不正确的地方。学习如何使用调试器。听起来你可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:加上你的添加值和删除值似乎有很多逻辑缺陷。p=p->next不会给出列表的结尾,而是列表中的第二个元素。这就是你想要的吗?如果没有定义head元素,你希望发生什么?这些函数如何调用?构造函数将
head
tail
设置为
NULL
是一个问题。不仅仅是因为以后访问
p->next
是无效的,但也因为您泄漏了为类内成员初始值设定项分配的内存。她想在末尾添加:“将项目添加到列表末尾”她想在末尾添加:“将项目添加到列表末尾”
void deletingValues()
{
    if ( head == NULL )
        return;

    myNode *temp = head->next;
    delete head;
    head = temp;
    if ( head == NULL )
        tail == NULL;
}