我应该用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
。
感谢您的帮助:)
答案 0 :(得分:3)
此代码可能无法执行您想要的操作:
ptr = new linkedlist(input);
ptr = ptr->next;
这会创建一个新的linkedlist
节点,但不会以任何方式将其连接到链接列表head
。这是代码中您需要执行某些操作以将其与现有列表连接的部分。
答案 1 :(得分:0)
您希望head
指向链接列表的第一个元素,ptr
指向最后一个元素。
您当前的代码是:
if (head == NULL)
{
head = new linkedlist(input);
head->next = ptr; //points to the first one
}
这将头部设置为第一个元素,但随后设置在NULL
旁边(它已经是)。你想要做的是
if (head == NULL)
{
head = new linkedlist(input);
ptr = head;
}
这会创建头部,然后将ptr
设置为该元素(此时,head
也是链接列表的最后一个元素。)
接下来你要做的是:
else
{
ptr = new linkedlist(input);
ptr = ptr->next;
}
这会将ptr
设置为新元素,但(如另一个答案中所述)不会将其连接到列表的其余部分。你想要做的是
else
{
ptr->next = new linkedlist(input);
ptr = ptr->next;
}
这将在之后的当前最后一个元素设置为新输入,将指针更新为最后一个元素。
我建议您查看代码,因为还有其他一些问题。首先,您有一个构造函数和一些您不使用的参数。此外,从技术上讲,linkedlist
结构只是链表的节点。如果您想要一个充当完整链表的单个结构,它需要管理其节点的头指针和尾指针。