所以我试图在C ++中创建一个应该在链表末尾添加元素的函数。
应该在main
- 方法中调用添加元素的函数。
即使列表中没有元素,也应该可以调用它。
到目前为止我的内容如下:
int main()
{
ListElement* l = new ListElement;
l->digit = 9;
l->next = NULL;
appendList(l, 5);
appendList(l, 7);
printList(l);
return 0;
}
void appendList(ListElement *&l, int newDigit)
{
ListElement *lh = new ListElement;
if(l == NULL)
{
l->digit = newDigit;
l->next = NULL;
}
else
{
lh=l;
while(lh != NULL)
{
lh=lh->next;
}
lh=lh->next;
lh->digit = newDigit;
lh->next = NULL;
l = lh;
}
}
不幸的是它不起作用。我试过删除或添加参数 - 没什么帮助,我在互联网上找不到合适的答案。 所以,如果你们中的任何人都可以帮助我,我会非常非常高兴,因为我在这里绝望......
答案 0 :(得分:5)
仔细看看:
if (l == NULL)
{
l->digit = newDigit;
l->next = NULL;
}
l == NULL .... l->数字您正在取消引用NULL指针!
另一个问题是您在lh
中分配ListElement *lh = new ListElement;
,然后立即在“其他”阻止l
中使用lh=l;
覆盖其值。
尝试这样的事情:
#include <cassert>
#include <iostream>
struct ListElement final {
explicit ListElement(int digit) : digit{digit} {}
int digit = 0;
ListElement* next = nullptr;
};
void appendList(ListElement*& l, int newDigit);
void printList(ListElement* l);
void freeList(ListElement* l);
int main() {
ListElement* l{nullptr};
appendList(l, 9);
appendList(l, 5);
appendList(l, 7);
printList(l);
freeList(l);
}
void appendList(ListElement*& l, int newDigit) {
if (!l) {
// Creating first element of the list.
l = new ListElement{newDigit};
return;
}
// Since we got a single linked list and don't have a pointer
// to its tail, iterate over the list to get the last element
// to append to...
auto tail = l;
while (tail->next)
tail = tail->next;
assert(tail->next == nullptr);
tail->next = new ListElement{newDigit};
}
void printList(ListElement* l) {
unsigned int index = 0;
while (l != nullptr) {
std::cout << index++ << ": " << l->digit << '\n';
l = l->next;
}
}
void freeList(ListElement* l) {
ListElement* tmp;
while (l != nullptr) {
tmp = l;
l = l->next;
delete tmp;
}
}
答案 1 :(得分:2)
尝试以下
void appendList( ListElement * &head, int newDigit )
{
if ( head == 0 )
{
head = new ListElement;
head->digit = newDigit;
head->next = 0;
}
else
{
ListElement *next = head;
while ( next->next ) next = next->next;
next->next = new ListElement;
next->next->digit = newDigit;
next->next->next = 0;
}
}
int main()
{
ListElement *head = 0;
appendList( head, 9 );
appendList( head, 5 );
appendList( head, 7 );
printList( head );
return 0;
}