тебе надо вставить элемент в определённую позицию, а не в конец списка, правильно ?| Код | #include <stdio.h> #include <stdlib.h>
typedef struct NODE{ int num; struct NODE * left; // указатель на предыдущий элемент struct NODE * right; // указатель на следующий элемент }Node;
Node * insert( Node * node, size_t pos, int num ); // функция вставки числа в розицию pos
/////////////// main /////////////////// int main(int argc, char *argv[]) { Node *begin = NULL, *node; // указатели на начало, и добавляемый элемент int num, // здесь хранится число sum=0; // здесь сумма чисел while( scanf("%d", &num ) == 1 ){ node = (Node*) malloc(sizeof(Node)); // новый узел в конце списка node->num = num; // запись числа в новый элемент if( !begin ) begin->left = begin->right = begin =node; // создаём кольцо... node->right = begin; node->left = begin->left; begin->left->right = node; // вставляем в список begin->left = node; } puts("\n\n");
// вставляем кудани-будь в середину( нумерация с нуля - 0,1,2,3 ... ) begin = insert( begin, 3, 1001 ); // в третью позицию( нумерация с нулевой позиции ) begin = insert( begin, 5, 1002 ); begin = insert( begin, 7, 1003 ); begin = insert( begin, 10, 1004 );
// вывод содержимого списка и подсчёт суммы чисел node = begin; if( begin ) do{ printf("%d\n", node->num ); sum += node->num; node = node->right; }while( node != begin ); printf("\n\nSumma = %d", sum );
// удаление элементов списка begin->left->right = NULL; for( node = begin; begin; begin = node ){ if( node ) node=node->right; free( begin ); }
fflush(stdin); getchar(); // пауза return 0; } //________ END MAIN ______________
Node * insert( Node * node, size_t pos, int num ){ Node * begin = node; Node * n = (Node*) malloc( sizeof(Node)); size_t i;
if( node ){ // проверка существования списка for( i=0; i<pos; i++ ){ // поиск элемента стоящего в позиции pos node = node->right; if( node == begin ) break; // достигли конца списка } // вставка n->num = num; n->right = node; n->left = node->left; node->left->right = n; // вставляем в список node->left = n; return begin; } else{ // если списка нет то создаём его n->num = num; n->left = n->right = n; return n; } }
|
|