我应该用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
结构只是链表的一个节点。如果你想要一个充当完整链表的结构,它需要管理其节点的头和尾指针。