Пример программы на обработку односвязного списка
#include
<iostream.h>
#include
<stdlib.h>
struct
item
{int
data;
item
*next;
};
//функция
добавления элемента x
в заданную позицию pos
односвязного списка – получился,
кажется, лаконичный текст, который
прошел все мои тесты.
void
add(item *&top, int pos, int x)
{int
i; item *pnew, *p=top;
pnew=new
item; pnew->data=x;
if
(pos<=1||top==NULL) {pnew->next=top; top=pnew;}
else
{
for(i=1;i<pos-1;i++) if (p->next!=NULL) p=p->next;
pnew->next=p->next;
p->next=pnew;}
}
//
вспомогательная
функция для вывода списка
void
print(item *top)
{item
*p=top;
while
(p!=NULL) {cout<<p->data<<' '; p=p->next;}
cout<<endl;
}
main()
{item
*top=NULL;
add(top,2,2222);//
это ужасный тест – я добавляю элемент
во вторую позицию пустого списка (такой
позиции нет, но элемент все равно
добавляется в начало списка)
for(int
i=2; i<=10;i++) add(top,i,i);
//надобавляла
элементов в конец списка
print(top);
cin.get();
add(top,1,0);
//
добавила элемент в начало непустого
списка
print(top);
cin.get();
add(top,12,100);
//
теперь в
конец
print(top);
cin.get();
add(top,3,300);
//
теперь в
середину
print(top);
cin.get();
}