我尝试使用结构使用C ++实现Linked List。 我已经包含了三个功能 - 从最后的大小,插入和删除。 该程序编译成功。在执行期间,当我尝试为LLInsert()函数提供输入时,我的执行窗口上只有一个光标闪烁。我不知道函数是否返回main。 当我试图找到空列表的大小时,LLSize()也不会返回0。 我似乎无法弄清楚我做错了什么。这是我的代码。
#include<iostream>
using namespace std;
struct LL {
LL *next = NULL;
int data;
};
int LLSize(LL *head) {
LL *current = new LL;
current = head;
int count = 0;
while(current != NULL) {
current = current -> next;
count ++;
}
return count;
}
void LLInsert(LL *head,int value) {
LL *current = new LL;
current = head;
LL *Newnode = new LL;
Newnode -> data = value;
Newnode -> next = NULL;
if(head == NULL) {
head = Newnode;
return;
}
while(current->next != NULL) {
current = current->next;
}
current->next = Newnode;
return;
}
int LLDelete(LL *head) {
LL *current = new LL;
current = head;
int deleteddata;
while(current->next->next != NULL) {
current = current->next;
}
current->next->data = deleteddata;
current->next = NULL;
return deleteddata;
}
int main() {
int choice;
LL *A;
while(1) {
cout << "1. Size\n2. Insert\n3. Delete\n4. Exit" << endl;
cout << "Enter a choice : ";
cin >> choice;
switch(choice) {
case 1 : {
cout << "\nLength = " << LLSize(A) << endl;
break;
}
case 2 : {
int value;
cout << "\nEnter the element to insert : ";
cin >> value;
LLInsert(A,value);
break;
}
case 3 : {
cout << LLDelete(A);
break;
}
case 4 : {
exit(0);
}
default : {
cout << "\nInvalid choice. Enter a valid choice " << endl;
break;
}
}
}
}
答案 0 :(得分:0)
请勿使用using namespace
。
为列表创建一个类型,为节点创建一个类型
struct LL {
LL* next;
int data;
};
struct L {
LL* head;
};
使用引用并且不在每个函数中分配新内存
int LLSize(L& list) {
LL *current = list.head;
检查列表的头部是否已设置并使用nullptr
if (list.head == nullptr) {
使用列表的实例而不是指针
int main() {
int choice;
L A;
使用像gdb这样的调试器来分析你的程序。
最后清理。删除使用new
分配的内存。每个delete
一个new
。