После долгих усилий мне удалось собрать воедино функцию, которая удаляет некоторый узел из моего связанного списка.Но из чистого интереса я хотел бы выяснить, как можно удалить первый узел в списке, то есть заголовок.
Моя программа запрашивает письмо для удаления, например.Привет хранится в списке, пользователь вводит H для удаления, так что теперь список ello В данный момент с моим кодом, программа вылетает, очевидно, как если бы H был удален, нет заголовка, и программа не знаетгде искать этот список.
Ниже приведена моя текущая реализация, любые подсказки или подсказки о том, как изменить этот код (я хотел бы, чтобы он был похож на мой), чтобы разрешить удаление узла узлаочень цениться!.
РЕДАКТИРОВАТЬ: В ответ на ниже
FullList DeleteNode(FullList temp, char c) {
FullList remember;
FullList ptr;
while (temp.head->c != c) {
remember.head = temp.head;
temp.head = temp.head->next;
}
ptr.head = temp.head->next;
free(temp.head);
remember.head->next = ptr.head;
return temp;
}
int main(void) {
FullList List;
char c, s;
List.head = NULL;
while ((c=getchar()) != '.') {
List = addToEnd(List, c);
}
scanf(" %c", &s);
List = DeleteNode(List, s);
while (List.head != NULL) {
printf("%c", List.head->c);
List.head = List.head->next;
}
return 0;
}
typedef struct List {
char c;
struct List *next;
}List;
typedef struct {
List *head;
List *tail;
}FullList;
List *insertList(char c, List *t1) {
List *t = (List*)calloc(1, sizeof(List));
t->c = c ;
t->next = t1;
return t;
}
FullList addToEnd(FullList c, char element) {
if (c.head == NULL) {
c.head = c.tail = insertList(element, NULL);
}else {
c.tail->next = insertList(element, NULL);
c.tail = c.tail->next;
}
return c;
}
void DeleteNode(FullList temp, char c) {
FullList remember;
FullList ptr;
while (temp.head->c != c) {
remember.head = temp.head;
temp.head = temp.head->next;
}
ptr.head = temp.head->next;
free(temp.head);
remember.head->next = ptr.head;
}
int main(void) {
FullList List;
char c, s;
List.head = NULL;
while ((c=getchar()) != '.') {
List = addToEnd(List, c);
}
scanf(" %c", &s);
DeleteNode(List, s);
while (List.head != NULL) {
printf("%c", List.head->c);
List.head = List.head->next;
}
return 0;
}