Рассмотрим этот список: 2->1->3->5->6->4->7->NULL
Когда ваш код достигнет:
odd_head.next = even_head
Ссылки будут:
2->3
3->6
6->7
7->NULL
1->3
5->6
4->7
even_head.next
будет 3
even_head.next.next
будет 6
, а не 5
(ЭТО НЕПРАВИЛЬНО.)
Причина в том, что ссылки изменяются в первом цикле while! Отсюда все начинает ошибаться.
Из многих возможных решений одно простое решение:
def oddEvenList(self, head):
if not head:
return head
odd_head = head
even_head_copy = even_head = head.next
while odd_head and even_head and even_head.next:
odd_head.next = even_head.next
odd_head = odd_head.next
even_head.next = odd_head.next
even_head = even_head.next
odd_head.next = even_head_copy
return head