我的问题很简单,答案太少了。我知道如何添加或删除节点,但是如何将前一个节点的数据复制到下一个节点?基本上,对于数组,最简单的移动方法是将前一个元素复制到最后一个元素并像这样向上移动数组:
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;
}
我将其分配给我的列表指针,以便它添加到左侧。但我不能去一个链表。因为指针接下来指向下一个节点。我是否必须为每个节点添加一个 prev 指针?但它应该指向什么?谢谢你以任何方式提供帮助或责备,因为我只是无法正确思考。
编辑:我的想法是简单地执行以下操作:
for (current = head; current!= NULL; current=current -> next) ;
从那里:
for( ; current!= head; current = current -> prev)
current ->data = current -> prev -> data;
return head;
像这样的东西?
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;
}
}