Поверьте, это просто простая ошибка.
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) { return head; }
# swapping the first and second
ListNode second = new ListNode(head.val);
ListNode first = new ListNode(head.next.val);
first.next = second;
# recursively swap the next 2 items in the linked list till the end of list
ListNode recursedList = swapPairs(head.next.next);
first.next.next = recursedList;
return first;
}
Это должно работать как в случае четного, так и нечетного количества узлов в связанном списке.
Основная ошибка заключается в том, что вы меняли первый узел и третий узел, а не первый и второй (не соседние пары). Кроме того, такие назначения, как ListNode first = head;
, делают только мелкие копии. Это означает, что если вы попробуете следующее ...
printLinkedList(head); # function to print out the entire linked list
ListNode first = head;
first.val = 100;
first.next = head.next.next.next;
printLinkedList(head);
... вы обнаружите, что изменение first также изменило head , и вы получите следующие результаты печати:
1 -> 2 -> 3 -> 4 -> null
100 -> 4 -> null