Форум программистов, компьютерный форум CyberForum.ru

Односвязный список: где-то закралась ошибка - C++

Восстановить пароль Регистрация
 
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
19.09.2011, 20:31     Односвязный список: где-то закралась ошибка #1
Не могу найти где ошибка и всё тут, наверняка ошибка глупая и я её попросту не замечаю.

Сам класс список:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class List
{
    struct element
    {
        element(string s, element *next=NULL)
        {
            data=s;
            Next=next;
        }
        string data;
        element *Next;
    };
 
    element *Head;
    element *Tail;
 
public:
    List(string str)
    {
        Head=new element(str,0);
        Tail=Head;
    }
 
    void addToTail(string str)
    {
        element *temp=new element(str,0);
        if (Tail)
         Tail->Next=temp;
        else
         Head=Tail=temp;
    }
 
    void addToHead(string str)
    {
        element *temp=new element (str,0);
        if(Head)
        {
            element *oldHead=Head;
            Head=temp;
            temp->Next=oldHead;
        }
        else
         Head=Tail=temp;
    }
 
    void print()
    {
        element *temp=Head;
        while(temp)
        {
            cout<<temp->data<<' ';
            temp=temp->Next;
        }
        cout<<endl;
    }
 
     ...
 
 
 
    ~List()
    {
        element *temp;
        while(Head)
        {
            temp=Head;
            Head=Head->Next;
            delete temp;
        }
    }
};
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    List test("simple");
    test.free();
    test.addToTail("text");
    test.addToTail("is");
//    test.addToTail("so");
//    test.addToTail("simple");
    test.print();
//    cout<<"After reverse():\n";
//    test.reverse();
//    test.print();
}
То что класс работает с ошибками заметил когда попытался добавить больше чем 2 элемента в список, где же я ошибся при описании класса?

Добавлено через 4 минуты
Через addToHead тоже получается что хранится только два последних добавленных элемента.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2011, 20:31     Односвязный список: где-то закралась ошибка
Посмотрите здесь:

C++ Односвязный список
C++ Односвязный список.
Односвязный список C++
C++ Односвязный список
C++ Односвязный список
C++ Ошибка добавления в односвязный список
Задача C++. Линейный список. Где ошибка? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.09.2011, 10:02     Односвязный список: где-то закралась ошибка #2
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <string>
#include <iostream>
 
using std::string;
using std::cout;
using std::endl;
 
class List
{
    struct element
    {
        element(string s, element *next=NULL)
        {
            data=s;
            Next=next;
        }
        string data;
        element *Next;
    };
 
    element *Head;
    element *Tail;
 
public:
    List(string str)
    {
        Head=new element(str,0);
        Tail=Head;
    }
 
    void addToTail(string str)
    {
        element *temp=new element(str,0);
        if (Tail)
        {
         Tail->Next=temp;
         Tail = temp;
        }
        else
         Head=Tail=temp;
    }
 
    void addToHead(string str)
    {
        element *temp=new element (str,0);
        if(Head)
        {
            temp->Next=Head;
            Head = temp;
        }
        else
         Head=Tail=temp;
    }
 
    void print()
    {
        element *temp=Head;
        while(temp)
        {
            cout<<temp->data<<' ';
            temp=temp->Next;
        }
        cout<<endl;
    }
 
    ~List()
    {
        element *temp;
        while(Head)
        {
            temp=Head;
            Head=Head->Next;
            delete temp;
        }
    }
};
 
int main()
{
    List test("simple");
    //test.free();
    test.addToTail("text");
    test.addToTail("is");
    test.addToTail("so");
    test.addToTail("simple");
    test.print();
    test.addToHead("hello");
    test.addToHead("end");
    test.addToTail("now");
    test.print();
//    cout<<"After reverse():\n";
//    test.reverse();
//    test.print();
}
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
20.09.2011, 11:41  [ТС]     Односвязный список: где-то закралась ошибка #3
Ага, теперь сегодня на свежую голову уже понятно где я вчера накосячил.
Yandex
Объявления
20.09.2011, 11:41     Односвязный список: где-то закралась ошибка
Ответ Создать тему
Опции темы

Текущее время: 17:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru