Адрес элементов в списке

Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в начало списка новый элемент со значением D1 , а в конец — новый элемент со значением D2 . Вывести адреса первого и последнего элементов полученного списка.

Вот я половину сделал и теперь не знаю как вывести адрес первого и последнего элементов полученного списка

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include <time.h>
#include <locale.h>



struct List
{
    int x; 
    List* Next, * Prev; 
};

List* Head = 0, * Last = 0; /*указатели на адреса начало и конец списка*/

void Add(int x)
{
    List* r = new List; /*выделение памяти под новый элемент*/
    r->x = x; /*записываем значение в структуру*/
    r->Next = 0; /*указываем, что изначально по следующему адресу пусто*/
    r->Prev = 0; /*указываем, что изначально по следующему адресу пусто*/
    if (Head != 0) /*если список не пуст*/
    {
        r->Prev = Last; /*указываем адрес на пред.элемент в поле последний элемент*/
        Last->Next = r; /*указываем адрес следующего за хвостом элемента*/
        Last = r; /*меняем адрес хвоста*/
    }
    else /*если список пуст*/
    {
        Head = Last = r; /*голова = концу = элементу, который сейчас добавили*/
    }
}


void Write()
{
    List* temp = Head; /*временный указатель на первый элемент*/
    while (temp != 0) /*пока не встретили пустое значние*/
    {
        printf("%d ", temp->x); /*выводим каждое считанное значение счетчиком*/
        temp = temp->Next; /*смена адреса на следующий элемент*/
    }
    printf("\n");
}

void Add_start(int d1)
{
    List* n = new List; /*временный указатель на первый элемент*/
    n->x = d1; /*записываем значение в структуру*/
    n->Next = Head; /*указываем адрес следующего = голове*/
    n->Prev = 0; /*указываем, что изначально по следующему адресу пусто*/
    Head->Prev = n; /*указываем адрес пред.элемента нашего нового элемента*/
    Head = n; /*присваиваем значения элемента = голове*/
}

void Add_end(int d2)
{
    List* z = new List;
    z->x = d2;
    z->Prev = Last;
    z->Next = 0;
    Last->Next = z;
    Last = z;
}

int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));


    for (int i = 0; i < 10; i++)
    {
        Add(rand() % 9);
    }
    printf("Исходный список:");
   
    Write();
 
  
    Add_start(2);
   
    Add_end(2);
    
    printf("Список после добавления элемета в начало и конец: ");
    Write();

   // system("pause");
    return 0;
}

Ответы (0 шт):