如何复制用C双重排序的链表

时间:2018-10-18 17:22:55

标签: c arrays sorting pointers

我已使用:

定义了一个列表
typedef struct st_list {
Node * by_name ;
Node * by_age;
} SortedList ;

之后,我使用:p定义了节点

typedef struct st_node {
char name [100];
unsigned int age;
struct st_node * suivant_nom ;
struct st_node * suivant_age ;
} Node ; 

之后,我定义了一个函数来在此列表中插入元素:

void insert (SortedList* l , char* name , int age ){
     Node *N,*A,*tmp,*new;
     N=l->by_name;
     A=l->by_age;
     tmp=NULL;
     new= (Node*)malloc(sizeof(Node));
     new->age=age;
     new->name=strcpy(new->name,name);
     if (N==NULL) {N=new;}
     while ((N!=NULL) & strcpy(name,N->name)<0){
          tmp=N;
          N=N->suivant_nom;}
     tmp->suivant_nom=new;
     new->suivant_nom=N;
    while ((N!=NULL) & strcpy(name,N->name)<0){
          tmp=N;
          N=N->suivant_nom;}
     tmp->suivant_age=new;
     new->suivant_age=N;}

此后,我还使用此原型定义了一个函数:

Node* copyNode(None* p) ;

复制节点并返回指向其副本的指针。

我现在想做的是实现一个函数,该函数复制作为参数给出的列表,它的原型将是:

SortedList* duplicatelist( SortedList l) ;

此函数将返回一个指向SortedList l副本的指针; 我知道C语言中的一种算法可以复制LinkedList,例如How do you copy a linked list into another list?,但是由于列表是双重排序的,因此无法使用此方法。 我试图使用一个数组,并将列表中所有元素放入参数中,并进行一个for循环,例如tab[i]->suivant_age=tab[i+1],但在那之后,我们可以实现按年龄排序。 我希望我很清楚,我能很好地说明我的问题吗?

0 个答案:

没有答案