2015-09-03 3 views
2

своп элементы в связанном списке:парного Linked Список выпуск

парного своп Элементы старта: A> B> C> D> E> Null End: B> A> D> C> E> Null

Node * pairOne = head; 
Node * pairTwo = head.next; 

if (pairOne == Null || PairTwo == Null) 
return; 

while (pairOne & pairTwo){ 

pairOne.next = pairTwo.next; 
pairTwo.next = pairOne; 

pairOne = pairOne.next; 
pairTwo = pairOne.next; 

} 

Что не так с моей логикой?
Я не могу понять, почему я не могу сделать это B> A> D> C> E> Null

ответ

1

Давайте посмотрим на ваш цикл while. В первой итерации, pairOne = A и pairTwo = B, поэтому в цикле вы обновляете A.next = C и B.next = A, что является правильным. Вы увидите проблему во второй итерации, когда pairOne = C и pairTwo = D, вы будете обновлять C.next = E и D.next = C, A.next теперь должен указывать на D вместо C. Однако в вашем коде, вы никогда не обновляете эту ссылку, поэтому в итоге вы получите B> A> C> E> NULL. Чтобы устранить проблему, один из способов, чтобы сохранить предыдущий из pairOne и обновлять свое следующее значение также:

Node * pairOne = head; 
Node * pairTwo = head.next; 
Node prev = Null; 

if (pairOne == Null || PairTwo == Null) 
    return; 

while (pairOne & pairTwo){ 

    pairOne.next = pairTwo.next; 
    pairTwo.next = pairOne; 
    if (prev) { 
     prev.setNext(pairTwo); 
    } 

    prev = pairOne; 
    pairOne = pairOne.next; 
    pairTwo = pairOne.next; 
} 

Еще одна вещь, вам нужно обновить голову тоже.

Смежные вопросы