我的问题很简单,答案太少了。我知道如何添加或删除节点但是如何将以前节点的一个数据复制到以下节点?基本上使用数组,移动它的最简单方法是将前一个元素复制到最后一个元素并向上移动数组,如下所示:
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;
}
}