Следующий код хорошо работает со всеми, кроме функции удаления.Когда я удаляю узлы с самого начала, с конца, с середины, а затем снова с самого начала, кажется, что код не работает.
Можно ли это исправить?Единственная проблема заключается в том, чтобы быть с функцией удаления.Также можно подойти к удалению на последнем узле, не используя функцию linkLength?
void del()
{
printf("\nDeletion Activated!!\n" );
int i,pos;
if(front == NULL)
return;
printf("\nEnter the position : ");
scanf("%d",&pos);
// If there is only one node
if (front -> next == front)
{
front = NULL;
free(front);
}
// To check whether deletion is Possible
if(pos > linkLength(front))
{
printf("\nDeletion Not Possible\n");
main();
}
// To delete the first node
if(pos == 1)
{
temp = front;
front = front->next;
rear->next = front;
free(temp);
}
// to delete from the end
else if(pos == linkLength(front) + 1)
{
if(front == NULL)
{
printf("\nList is empty");
return;
}
// if there is more than one node
else
{
temp = front;
while (temp->next != front) {
x = temp;
temp = temp->next;
}
x->next = temp->next;
free(temp);
}
}
// from any other position
else
{
for(temp = front,i = 1;temp != NULL;temp = temp->next,i++)
{
if(i == (pos - 1)){
x = temp->next;
temp->next = temp->next->next;
free(x);
break;
}
}
}
}