Łącznie dwóch list jednokierunkowych

0

Witam,
Mam dwie listy jednokierunkowe:
1 lista : 1-2-3
2 lista: 4-5
Chcę podpiąć koniec listy 1 do początku listy drugiej - bez tworzenia trzeciej listy - Problem wydaję mi się banalny i nie rozumiem skąd bierze się problem:

void connect(struct Node * head1, struct Node * head2)
{
 while(head1)
 {
     head1=head1->link; //dochodze do konca listy 1
 }
    head1->link = head2; // lacze z lista 2 -> ERROR
    displayLL(head1); 
} 

/////////////////////////////////////////////
2] Czy ktoś mógłby wytłumaczyć dlaczego dla funkcji dodającej nowy bloczek w liście, używamy wskaźnik na wskaźnik?

void addNode(struct Node **head) //wskaznik na liste
{
    int wartosc=0;
    struct Node * y = malloc(sizeof(struct Node)); //tworze nowy bloczek
    printf("Jaka wartosc chcesz dodac do listy?\n");
    scanf("%d",&wartosc);
    y->Data=wartosc; //wpisuje do niego wartosc
    y->link =*head; // nowemu bloczkowi przypisujemy next - adres do kolejnego bloczka przechowywany przez head
    *head=y;
} 
0

Ad. 1: Problem jest w tej pętli:

 while(head1)
 {
     head1=head1->link; //dochodze do konca listy 1
 }
    head1->link = head2; // lacze z lista 2 -> ERROR 

Zakładam, że jak następnego elementu w liście nie ma to wskaźnik link jest równy zero. Dlatego też pętla while się skończy, ale wtedy head1 jest równe 0. A powinien to zero zamienić na wskaźnik do następnej listy. Czyli masz zły warunek. Powinien być

while(head1 -> link != 0) 

, ponieważ wtedy właśnie head1 będzie wskazywał na ostatni element pierwszej listy, a nie jak w Twoim przypadku "w pustkę" i zamienisz następny element z braku na pierwszy elementy listy drugiej.
Ad. 2
Autor chce zamienić nie tylko to, na co wskazuje jakiś wskaźnik, ale również zaktualizować go.

0

Dzięki - oczywiście wszystko działa tylko musiałem jeszcze jeden wskaźnik zrobić który zapamięta początek pierwszej listy do wypisywania.

Myślałem że muszę dojść do końca -> 0 i tam ,,zakotwiczyć" do kolejnej listy =P

0

Kolejny błąd jest w tym wierszu: void connect(struct Node * head1, struct Node * head2)
Jeżeli pierwsza lista jest pusta to nie ma możliwości dołączenia do niej czegokolwiek.
Sposób rozwiązania podał @Tacet w odpowiedzi Ad 2

1 użytkowników online, w tym zalogowanych: 0, gości: 1