删除部分有什么问题?

时间:2013-01-28 16:51:14

标签: c++ visual-studio-2010

这是我的代码。我得到的问题是我无法将删除部分作为工作。我想删除结构的一个元素。以下是添加,搜索和删除添加元素的基本结构。元素也按递增顺序排序。

#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 Menu\n";
        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;
    }
}

1 个答案:

答案 0 :(得分:2)

你的删除功能应该是这样的。

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;
        }
    }
}

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