如何移动链表的数据? (在C中)

时间:2019-03-31 10:45:11

标签: c linked-list

我的问题很简单,回答却很少。我知道如何添加或删除节点,但是如何将上一个节点的数据复制到下一个节点?基本上,使用数组最简单的方法是将上一个元素复制到最后一个元素,然后像这样向上移动数组:

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

否则,您将每个元素复制到下一个元素,并为每个不需要的元素提供相同的数据。

然后我可以为tab [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;
}
我将其分配给列表指针的

,以便将其添加到左侧。但我不能上链表。由于指针下一个指向下一个节点。我是否必须向每个节点添加一个上一个指针?但是要指出什么呢?感谢您以任何方式提供帮助或您的指责,因为我只是无法正确思考。

编辑:然后我的想法是简单地做如下:

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

然后从那里:

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

1 个答案:

答案 0 :(得分:1)

像这样吗?

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;
    }
}