我有一个数组,我想通过将我的元素传递给节点来创建一个双向链表。并通过指针(prev和next)链接它们 我做的是
head = malloc(sizeof(struct)) 头戴式>一个先前= NULL 头戴式>接着= NULL 尾=头
for(i=0;i<num;i++){
//copy data from arr[i] to tail
temp=tail
tail->next=malloc(sizeof(struct))
tail=tail->next
tail->prev=temp
}
现在,我如何复制数据? temp,head和tail是结构的指针
答案 0 :(得分:2)
我猜你没有尝试编写和编译。 链表的元素至少应该有一些位置来保存数组的值,比方说int类型的数据。
#include <stdio.h>
#include <malloc.h>
#define N 3
typedef struct a{
struct a* prev;
struct a* next;
int data;
}item;
int main(void)
{
item* head;
item* tail;
item* temp;
int num = N;
int data[N] = {1,2,3}; /*initialization*/
int i = 0;
head = (item*)malloc(sizeof(item));
head -> prev = NULL;
head -> next = NULL;
tail = head;
for(i = 0; i < num; i ++){
temp = tail;
tail -> next = (item*)malloc(sizeof(item));
tail = tail -> next;
tail -> next = NULL;
tail -> data = data[i];
tail -> prev = temp;
}
for(temp = head -> next; temp != NULL; temp = temp -> next) /*the following is for testing purpose*/
printf("%d\t", temp -> data);
return 0;
}
请注意head元素不包含您想要的内容。
答案 1 :(得分:0)
您需要保存tail->prev
,以便执行以下操作:
node * tailPrev = tail->prev;
memcpy(tail, &arr[i], sizeof(*tail));
tail->prev = tailPrev;
//continue with your code...
答案 2 :(得分:0)
创建临时节点并解析链接列表从最后一个节点分配这些细节
counter=start_node;
temp=(struct NODE *)malloc(sizeof(struct NODE)); /*create new node*/
temp->node_data=data; /*set data in new node*/
while(counter -> next_node!=NULL)
{
counter=counter->next_node; /*increment in counter*/
}
temp->prev_node=counter; /*set next node of new node*/
counter->next_node = temp;
temp->next_node = null;
这里temp是当前节点。