Давайте посмотрим, что делает функция. Он принимает два аргумента, связанный список и индекс элемента, который нужно удалить.
Сначала он ищет нужный узел: p - это первый элемент связанного списка. Он начинает переходить через список, до тех пор, пока не будет найден нужный индекс (i=S-1
) или до конца списка (p=NULL
).
, когда он нашел нужный узел, устанавливает ссылку на следующий элемент: p-> next
, следующему пункту следующего пункта.
И теперь, вы также можете увидеть проблемы в функции:
- Когда элемент удаляется, сам элемент все еще находится в списке, то не просто больше не указатель на него, это утечка памяти, как сказал molbdnilo.
- Когда конец списка достигнут (p = NULL), вы пытаетесь установить p-> рядом с NULL, это заставит программу выкинуть исключение nullpointer.
- Если p является последним элементом в списке, p-> Next будет null, и поскольку вы пытаетесь вызвать «Next» на этом элементе, вы также получите исключение nullpointerexception.
Это фрагмент случайного кода. Пожалуйста, напишите [mcve] и объясните, что * вы не понимаете. – nvoigt
Вы должны пройти через функцию по строкам и подумать о том, что делает каждая строка. Обратите особое внимание на то, на что указывает каждый указатель. – user2079303
Принесите бумагу и ручку (cil), нарисуйте связанный список и посмотрите, что произойдет, когда вы нарисуете 'p-> next = p-> next-> next;'. – molbdnilo