1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 92
1

Односвязный список: удалить первый элемент

27.05.2014, 15:16. Показов 2284. Ответов 4
Метки нет (Все метки)

День добрый уважаемые знатоки, начал разбираться с реализацией односвязных списков, вроде бы все как надо, но проблема в том что я не могу удалить первый узел в списке, почему удалить не могу я знаю, удаление происходит с посланием на предыдущий узел, а так как у первого узла нету предыдущего нужно сделать второй узел первый, и удалить бывший первый, сам процесс я понимаю, а вот реализовать не могу. Помогите пожалуйста, буду очень благодарен. Ниже приведу функцию удаления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void CMyList::Delete(int num)
{
    int thisn=1;
    if(!(MoveToFirstSok()))
        cout<<Rus("Список пустой!\n");
    if((SokCount<num)||(SokCount<0)) cout<<Rus("Такого сока нет\n");
    else
    {
        while(GetCurSok())
        {
            if(num==thisn)  
            {
                Temp=GetCurSok();
                break;
            }
            else 
            {
                thisn++;
                MoveToNextSok();
            }
        }
    }
    MoveToFirstSok();
    for(int i=1;i<num-1;i++) MoveToNextSok();
    GetCurSok()->setNextSok(Temp->getNextSok());
    delete Temp;
    cout<<endl;
}
Очень нуждаюсь в вашей помощи.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2014, 15:16
Ответы с готовыми решениями:

Односвязный список: удалить элемент списка, если он чётный и следующий элемент отрицательный и нечётный
Здравствуйте. Задание на односвязные списки: удалить элемент списка, если он чётный и следующий...

Односвязный список добавить и удалить элемент
Удаление элемента происходит правильно а вот с добавлением чтото не то.....вроде вставляет в конец...

Односвязный список: удалить последний элемент равный 0
Удалить последний элемент однонаправленного списка равный 0.

Односвязный список: удалить элемент после каждого положительного числа
Необходимо удалить элемент после каждого положительного числа.

4
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
27.05.2014, 15:22 2
В этой мешанине функций ничего не разобрать)
Механизм примерно такой:
C++
1
2
3
node* temp = first;
first = first->next;
delete temp;
0
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 92
27.05.2014, 15:42  [ТС] 3
Делаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void CMyList::Delete(int num)
{
    int thisn=1;
    if(!(MoveToFirstSok()))
        cout<<Rus("Список пустой!\n");
    if((SokCount<num)||(SokCount<0)) cout<<Rus("Такого сока нет\n");
    else
    {
        while(GetCurSok())
        {
            if(num==thisn)  
            {
                Temp=GetCurSok();
                break;
            }
            else 
            {
                thisn++;
                MoveToNextSok();
            }
        }
    }
    MoveToFirstSok();
    node* Temp = First;
    First = First->Next;
    //delete Temp;
    for(int i=1;i<num-1;i++) MoveToNextSok();
    GetCurSok()->setNextSok(Temp->getNextSok());
    delete Temp;
    cout<<endl;
}
не совсем понимаю что такое node*, пишет что

1>c:\Sok\mylist.cpp(123) : error C2065: 'node' : undeclared identifier

не объявлена переменная.

И наверное два раза удалять Temp не нужно))
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
27.05.2014, 16:26 4
Лучший ответ Сообщение было отмечено Енер как решение

Решение

Ну конечно, я ж тебе не готовый код привел, а схему. Я не видел весь твой класс, хз как у тебя там все называется и устроено - одной функции, причем как будто специально настолько запутанной -явно мало. Куча каких-то левых функций(насколько я понял, тут не просто односвязный список=)).

В схеме - node* - узел списка, first - 'голова' этого списка. Адаптируй под свой класс, и все.
1
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 92
27.05.2014, 21:51  [ТС] 5
Огромное спасибо, очень помогло )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2014, 21:51
Помогаю со студенческими работами здесь

В пользовательском классе "Двусвязный список" продублировать первый положительный элемент и удалить первый отрицательный
Здравствуйте,помогите пожалуйста в тете &quot;Двусвязный список&quot; Создать двусвязный список с...

Создать линейный односвязный список из вещественных чисел. Удалить из списка элемент перед каждым элементом со значен
Создать линейный односвязный список из вещественных чисел. Удалить из списка элемент перед каждым...

Создать динамический список. Удалить из него первый и последний элемент.
Список. есть пример программы: Создать динамический список. Удалить из него первый и последний...

Вставить элемент в односвязный список
Есть у меня такой код: Node *pv = new Node; //Node *b; char symbol; pv = head;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru