/якщо не порожній
// вивід значення елемента, на який вказує покажчик currentPtr
printf (" % D ", currentPtr-> data);
// поки наступний за currentPtr не почало списку і не кінець списку
while ((currentPtr-> nextPtr! = * SPtr) && (currentPtr-> nextPtr! = NULL)) {
// переміщаємо покажчик currentPtr на наступний елемент
currentPtr = currentPtr -> nextPtr;
// вивід значення елемента, на який вказує покажчик currentPtr
printf ("% d", currentPtr-> data);
}
return 1;
}
}
// функція повідомляє про те, що список складається з одного елемента
int oneLeft (LISTNODEPTR sPtr) {
return (sPtr-> nextPtr) == NULL;
}
// функція видалення елемента. Видаляє елемент і переміщає покажчик, який вказує початок списку, на наступний елемент за віддаленим
int delete4 (LISTNODEPTR * sPtr, int n) {
// ініціалізація змінних
LISTNODEPTR previousPtr, currentPtr, tempPtr;
int i, tw = 0;
// елси список порожній - вийти з функції
if ((* SPtr) == NULL)
return 0;
// установка покажчиків
previousPtr = * sPtr;
currentPtr = (* sPtr) -> nextPtr;
// якщо видаляємо не перший елемент
if (n! = 1) {
// встановлюємо покажчик currentPtr на видаляється елемент
// встановлюємо покажчик previousPtr на попередній йому
for (i = 1; i <(n-1); i + +) {
previousPtr = currentPtr;
currentPtr = currentPtr-> nextPtr;
}
}
else {//якщо видаляємо перший елемент
// встановлюємо покажчик currentPtr на видаляється елемент
// встановлюємо покажчик previousPtr на попередній йому
while ((currentPtr)! = (* sPtr)) {
previousPtr = currentPtr;
currentPtr = currentPtr-> nextPtr;
}
};
// якщо в списку не 2 елементи
if ((((* sPtr) -> nextPtr) -> nextPtr)! = * sPtr) {
// виключаємо currentPtr
previousPtr-> nextPtr = currentPtr-> nextPtr;
}
else {
// розриваємо список
previousPtr-> nextPtr = NULL;
};
// встановлюємо покажчик початку списку на наступний за currentPtr елемент
* sPtr = currentPtr-> nextPtr;
// видаляємо з пам'яті елемент currentPtr
tempPtr = currentPtr;
free (tempPtr);
}
// кінець