Передать адрес последнего элемента списка в функцию, для вставки нового элемента, по адресу последнего
помогите, пожалуйста.
Как, получив адрес последнего элемента в функции AddrLast, вставить в конец списка по этому адресу новый элемент, используя функцию InsertAddr?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <assert.h>
typedef struct Node {
int field;
struct Node* prev;
struct Node* next;
} tNode;
void AddElemEnd(tNode** head, int NewField) {
tNode* Elem;
Elem = malloc(sizeof(tNode)); // Выделяем память под узел , создаем узел
assert(Elem);// Проверяем выделение памяти
Elem->field = NewField; // Присваивание значения узлу
Elem->next = NULL; // Следующий - ноль
if (!*head) {
Elem->prev = NULL;
*head = Elem;
} else {
tNode* last = *head;
while (last->next != NULL)
last = last->next; // Сдвигаем голову списка
Elem->prev = last;
last->next = Elem;
}
}
void Reverse(tNode **head) {
tNode *curr = *head; //Текущий - голова списка
while (curr->next) { // Пока не дойдем до конца списка
tNode *Elem = curr->prev;
tNode *Neib = curr->next;
curr->prev = curr->next; // Меняем ссылки местами (следующий становиться предыдущим)
curr->next = Elem; // Устанавливаем ссылку на следующий
curr = Neib;
}
tNode *Elem = curr->prev;
curr->prev = curr->next; // Меняем ссылки местами (следующий становиться предыдущим)
curr->next = Elem; // Ус
*head = curr;
}
void AddrFirst(tNode **head) {
tNode *p = *head;
if (p == NULL) {
return;
} else {
printf("%p ", &p->field);
}
}
void *AddrLast(tNode **head) {
tNode *p = *head;
tNode *n;
n = p;
do {
n = p;
p = n->next;
} while (p);
printf("%p ", &n->field);
//return n;
}
void InsertAddr(tNode **AddrLast, int Newfield) {
tNode *NewElem = malloc(sizeof(NewElem));
NewElem->field = Newfield;
NewElem->next = NULL;
NewElem->prev = (*AddrLast);
(*AddrLast)->next = NewElem;// Добавить ссылку от головы списка к новому элементу
}
void FreeMemory(tNode *head) {
while (head) {
tNode *next = head->next;
free(head);
head = next;
}
}
void PrintFunc(tNode *head) {
tNode *p = head;
while (p != NULL) {
printf("%d ", p->field);
p = p->next;
}
printf("\n");
}
int main() {
setlocale(LC_ALL, "Russian");
tNode *head = NULL;
int c, d, val, in, ne;
printf("Number of elements\n");
scanf("%d", &d);
for (int i = 0; i < d; i++) {
printf("Input %d th element ", i);
scanf("%d", &val);
AddElemEnd(&head, val);
}
PrintFunc(head);
AddrFirstLast(&head);
AddrLast(&head);
Reverse(&head);
PrintFunc(head);
printf("Add element\n");
scanf("%d", &in);
InsertAddr(&AddrLast, in);
PrintFunc(head);
FreeMemory(head);
return 0;
}