我已使用:
定义了一个列表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]
,但在那之后,我们可以实现按年龄排序。
我希望我很清楚,我能很好地说明我的问题吗?