2015-06-24 3 views
0

У меня есть функция ll() для создания связанного списка следующим образом. Моя программа требует двух связанных списков. Можно ли повторно использовать эту функцию, чтобы я мог иметь два связанных списка, например head1 и head2?создать две связанные списки, используя одну функцию

#include <stdio.h> 
#include <malloc.h> 

typedef struct node 
{ 
int data; 
struct node* link; 
}Node; 

Node* head = NULL; 
Node* previous = NULL; 

int main(void) 
{ 
ll(); 

print(); 

return 0; 
} 

int ll() 
{ 
int data = 0; 
while(1) 
{ 
    printf("Enter data, -1 to stop : "); 
    scanf("%d",&data); 

    if(data == -1) 
    break; 

    addtoll(data); 
} 
} 

int addtoll(int data) 
{ 
    Node* ptr = NULL; 

    ptr = (Node*)malloc(sizeof(Node)); 
    ptr->data = data; 
    ptr->link = NULL; 

    if(head == NULL) 
    head = ptr; 
    else 
    previous->link = ptr; 

    previous = ptr; 
} 

int print() 
{ 
printf("Printing linked list contents : "); 
Node* ptr = head; 

while(ptr) 
{ 
    printf("%d ",ptr->data); 
    ptr = ptr->link; 
} 
printf("\n"); 
} 

Есть ли лучший способ, чем делать что-то вроде

main() 
{ 
ll(1); 
ll(2); 
} 

int ll(int serial) 
{ 
if(serial == 1) 
    use head1 everywhere in this function 
else if(serial == 2) 
    use head2 everywhere in this function 
} 
+3

Да, вы можете использовать ту же функцию (если она написана правильно) для создания любого количества списков. – haccks

+3

'll' - очень плохое имя для чего угодно. Он может читаться как «11» (одиннадцать) или «II» («глаз»). Или любая их комбинация. –

ответ

1

Вместо прохождения Int вы также можете просто передать связанный список.

Node head1; 
Node head2; 
Node previous1; 
Node previous2; 

int main(){ 
    ll(&head1, &previous1); 
    ll(&head2, &previous2); 
} 

int ll(Node* head, Node* previous) 
{ 
    int data = 0; 
    scanf("%d",&data); 
    *head = {data, null}; 
    previous = head; 

    while(1) 
    { 
     printf("Enter data, -1 to stop : "); 
     scanf("%d",&data); 

     if(data == -1) 
      break; 

     addtoll(data, previous); 
    } 
} 

int addtoll(int data, Node* previous) 
{ 
    struct student newNode = {data, null} 
    previous->link = &newNode; 
    previous = &newNode; 
} 
Смежные вопросы