C ++中的链接列表程序错误

时间:2018-02-07 15:32:46

标签: c++ linked-list

我尝试使用结构使用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;
            }
        }
        }
    } 

1 个答案:

答案 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