为什么这个链表不起作用?



我应该用c ++制作一个简单的链表。每个节点都应该包含一个char值和一个int。用户输入一个字母,信息存储在链表中。当用户输入 0 时,它应该输出用户输入的所有字母。

这是代码

#include <iostream>
#include <string>
using namespace std;
struct linkedlist
{
    linkedlist(char value, linkedlist* p = NULL)
    {
        next = p;
        this->value = value;
        this->input = value;
    }
    linkedlist(linkedlist* p = NULL)
    {
        next = p;
    }
    char input;
    int value;
    linkedlist* next;
};
void main()
{
    linkedlist* head = NULL;
    linkedlist* ptr = NULL;
    char input;
    while (true)
    {
        cout << "Enter a character: ";
        cin >> input;
        if (input == '0')
            break;
        if (head == NULL)
        {
            head = new linkedlist(input);
            head->next = ptr; //points to the first one         
        }
        else
        {
            ptr = new linkedlist(input);
            ptr = ptr->next;
        }
    }
    ptr = head; // Start at the beginning of the linked list
    while (ptr != NULL)
    {
        cout << ptr->input << endl;
        ptr = ptr->next;
    }
}

如果我输入r,s,t它只会输出第一个字母r.感谢您的所有帮助:)

此代码可能不会执行您想要的操作:

    ptr = new linkedlist(input);
    ptr = ptr->next;    

这将创建一个新的linkedlist节点,但不会以任何方式将其连接到链表head。这是代码的一部分,您需要在其中执行某些操作以将其与现有列表连接。

您希望head指向链表的第一个元素,ptr指向最后一个元素。

您当前的代码是这样的:

if (head == NULL)
{
        head = new linkedlist(input);
        head->next = ptr; //points to the first one         
}

这会将 head 设置为第一个元素,但随后设置为NULL(它已经是(。你想做的是

if (head == NULL)
{
    head = new linkedlist(input);
    ptr = head;
}

这将创建 head,然后将ptr设置为该元素(此时,head也是链表的最后一个元素(。

接下来你要做的是:

else
{
    ptr = new linkedlist(input);
    ptr = ptr->next;
}

这会ptr设置为新元素,但(如另一个答案中所述(不会将其连接到列表的其余部分。你想做的是

else
{
    ptr->next = new linkedlist(input);
    ptr = ptr->next;    
}
这会将当前最后一个元素

之后的元素设置为新输入,将指针更新到最后一个元素。

我建议您查看代码,因为还有其他一些问题。首先,你有一个构造函数和一些你不使用的参数。此外,从技术上讲,linkedlist结构只是链表的一个节点。如果你想要一个充当完整链表的结构,它需要管理其节点的头和尾指针。

相关内容

  • 没有找到相关文章

最新更新