Vega,
Чтобы удалить первый элемент из единственного связанного списка, все, что вам действительно нужно сделать, это «забыть» первый элемент (голову).
ОбщееПроцедура удаления первого узла:
- , если узлы динамически распределяются (которые они почти всегда находятся в связанном списке), то освобождают память, выделенную для этого узла.забудьте "голову, сдвинув ее" вниз.Я всегда думаю о связанном списке как о точечных точках, идущих вниз по странице.
Общая процедура удаления узла в среднем списка:
- свободная память
- свяжите запись выше этой с одной ниже этой.
- Т.е. prev-> next = this-> next
Общая процедура удаления последнего узла такова (я уверен, вы можете догадаться):
- свободная память
- prev-> next = null;(где prev - второй последний узел)
Рекурсия не имеет к этому никакого отношения.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define SIZE_OF_NAME 12
#define SUCCESS 0
typedef struct Stock* stock;
struct Stock {
int code;
char name[SIZE_OF_NAME];
stock next;
};
stock head = NULL;
stock prev = NULL;
stock StripABC(stock curr)
{
if (strstr(curr->name, "ABC-") != NULL) {
// the first name contains "ABC-", so strip it.
head = head->next;
curr = head;
}
return head;
}
int main(int argc, char *argv[])
{
struct Stock a, b;
a.code = 1; strcpy(a.name, "ABC-");
b.code = 2; strcpy(b.name, "Widget");
head = &a;
head->next = &b;
StripABC(head);
printf("head->name: %s\n", head->name);
return SUCCESS;
}
Удачи с ним.Кстати, связанные списки являются ЕДИНСТВЕННЫМИ «акциями в торговле» для программистов.Я до сих пор работаю с ними слишком часто; -)
Приветствия.Кит.