Войти

Показать полную графическую версию : [решено] Перестановка элементов списка


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

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
Ошибка в логике. Если мысленно пронумеровать элементы, то мы получим

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




© OSzone.net 2001-2012