Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Перестановка элементов списка (http://forum.oszone.net/showthread.php?t=261797)

Camaro 03-06-2013 19:50 2161605

Перестановка элементов списка
 
Уже третий день думаю над одной из лабораторных работ. Задание огромное, у меня уже мозги поплавились, а одного элемента всё ещё не хватает, для того, чтобы закончить работу.
Не могу понять как ссылке на следующий элемент списка присвоить значение ссылки на послеследующий, а ссылке на послеследующий - значение ссылки на предыдущий. Т.е. логику перестановки двух соседних элементов в односвязном/двусвязном списке я понимаю, но не могу понять как именно осуществить это.
Препод на больничном, от одногруппников толку никакого. Программирую на Си, но кое-что разрешили взять из С++.
Объясните пожалуйста.
Если что, вот мой список, точнее его объявление. После он был заполнен указателями на элементы другой структуры (проблем с этим не было)
Код:

struct STList{char *N;char *group;char *o;STList *Next;STList *Prev;} STL;
STList *Head=NULL;

Тут функция для перестановки 1 и 2 элементов. Естественно, нерабочая. Глаз замылился и уже не вижу в чём дело
Код:

void EXC1(void)
{
STList *x=new STList; STList *p=new STList;
x=Head; p=Head;
x=x->Next;
p->Next=x->Next;
x->Next=p;
}


ViRTaCe 04-06-2013 00:59 2161815

Ошибка в логике. Если мысленно пронумеровать элементы, то мы получим
Код:

x=Head; p=Head; // x и p  содержат 0-вые элементы
x=x->Next; // x содержит 1-й элемент
p->Next=x->Next; // x содержит 1-й элемет, p ->Next второй элемент.
x->Next=p; // x->Next и p содержат 0-й элемент


mrcnn 04-06-2013 09:09 2161897

для перестановки 1 и 2 элементов
Код:

x = Head;
p = Head;
t1 = x->Next;
t2 = t1->Next;
p = t1;
t1->Next = x;
x->Next = t2;


Camaro 04-06-2013 20:47 2162294

ViRTaCe, mrcnn, спасибо вам, что откликнулись.
ViRTaCe, да, надо мне внимательней быть. На самом деле выглядит глупо.
mrcnn, спасибо большое за код, правда там одна строка в конце выпала - присвоение Head значения p - но это, вероятно, механическая ошибка. Теперь всё работает:)


Время: 09:57.

Время: 09:57.
© OSzone.net 2001-