将数组的元素复制到C中的链表

时间:2011-12-05 11:43:28

标签: c arrays structure

我有一个数组,我想通过将我的元素传递给节点来创建一个双向链表。并通过指针(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是结构的指针

3 个答案:

答案 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是当前节点。