删除部分有什么问题

What is wrong with the delete section?

本文关键字:问题 什么 删除部      更新时间:2023-10-16

这是我的代码。我遇到的问题是我无法使工作成为删除器部分。我想删除结构的一个元素。下面是您添加、搜索和删除添加的元素的基本结构。此外,元素按递增顺序排序。

#include <iostream>
using namespace std;
struct el {
    int key;
    el *next;
} *start;
void init();
void add(int n);
void list();
void search(int n); // ima za dopylvane
void deleter(int n);
void main() {
    init();
    int n, num;
    do {
        cout << "n Menun";
        cout << "n1 - Add element";
        cout << "n2 - List elements";
        cout << "n3 - Searching for element";
        cout << "n4 - Delete element";
        cout << "n5 - Exit";
        cout << "n Your choice:";
        cin >> n;
        switch (n) {
            case 1:
                {
                    cout << "n Input num:";
                    cin >> num;
                    add(num);
                    break;
                }
            case 2:
                {
                    list();
                    break;
                }
            case 3:
                {
                    cout << "n Input num for searching:";
                    cin >> num;
                    search(num);
                    break;
                }
            case 4:
                {
                    cout << "n Input num for deleting:";
                    cin >> num;
                    deleter(num);
                    break;
                }
        }
    }
    while (n != 5);
}
void list() {
    el *p = start;
    if (start) while (p) {
        cout << p->key << "  ";
        p = p->next;
    } else cout << "n Empty list";
}
void init() {
    start = NULL;
}
void add(int n) {
    el *p = start;
    if (!start) {
        start = new el;
        start->key = n;
        start->next = NULL;
    } else {
        if (start->key > n) {
            start = new el;
            start->key = n;
            start->next = p;
        } else {
            el * q;
            while ((p->key < n) && (p->next)) {
                q = p;
                p = p->next;
            }
            if (p->key > n) {
                el *s;
                s = new el;
                s->key = n;
                s->next = p;
                q->next = s;
            } else {
                el *s;
                s = new el;
                s->key = n;
                s->next = NULL;
                p->next = s;
            }
        }
    }
}
void search(int n) {
    el *p = start;
    if (!start) cout << "nEmpty list!";
    else while ((p->key != n) && (p-> next))
    p = p->next;
    if (p->key == n) cout << "nYes!";
    else cout << "nNo!";
}

void deleter(int n) {
    el *p = start;
    if (!start) cout << "Enfsad";
    else while ((p->key != n) && (p->next)) {
        n = start->key;
        start = start->next;
        delete p;
    }
}

你的删除器函数应该是这样的。

void deleter (int n)
{
    el *p = start;
    el *prev = p;
    if (!start)
    {
        cout<<"Enfsad";
    }
    if(start->key == n)
    {
        start = start->next;
        delete prev;
    }
    else
    {
        while (p)
        {
            if(p->key == n)
            {
                prev->next = p->next;
                p->next = NULL;
                delete p; 
                break;
            }
            prev = p;
            p = p->next;
        }
    }
}

虽然我认为你需要检查一个好的链表应该如何。