Как сдвинуть данные связанного списка? (в С) - PullRequest
0 голосов
/ 31 марта 2019

Мой вопрос прост и слишком редок.Я знаю, как добавить или удалить узел, но как скопировать данные одного предыдущего узла в следующий узел?В основном, для массива проще всего сместить его, скопировав в последний элемент предыдущий элемент и переместив массив вверх следующим образом:

for (i = number_of_elements ; i > 0; i--)
    tab[i] = tab[i-1];

В противном случае вы бы скопировали каждый элемент в следующий и получили бы тот же самыйданные для каждого элемента, который нам не нужен.

Затем я могу присвоить вкладке [0] новое значение.

Но как это сделать со связанным списком?Я знаю, как добавить узел в начало списка:

struct node *node (struct node *head, int data)
{
    struct node *new_node = malloc(sizeof(struct node));

    new_node->data = data;
    new_node->next = head;
   // new_node->prev = ??

    return new_node;
}

, который я назначаю своему указателю списка, чтобы он добавлялся слева.Но я не могу пойти вверх по связанному списку.Поскольку указатель next ведет к следующему узлу.Должен ли я добавить предыдущий указатель на каждый узел?Но на что это должно указывать?Спасибо за помощь в любом случае или за ваш упрек, потому что я просто не могу думать должным образом.

edit: Моя идея заключается в следующем:

for (current = head; current!= NULL; current=current -> next) ;

и оттуда:

for( ; current!= head; current = current -> prev)
    current ->data = current -> prev -> data;
return head;

1 Ответ

1 голос
/ 31 марта 2019

Как то так?

void Shift(node* Head) {
    type PrevData = Head->Data;
    Head = Head->Next;
    while (Head) {
        type Temp = Head->Data;
        Head->Data = PrevData;
        PrevData = Temp;
        Head = Head->Next;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...