Я пытался поменять местами соседние узлы связанного списка, используя очереди. Ниже приведен код:
class Solution {
public ListNode swapPairs(ListNode head) {
Queue<ListNode> q1 = new LinkedList<>();
Queue<ListNode> q2 = new LinkedList<>();
ListNode curr = head;
while(curr != null && curr.next != null){
q1.offer(curr);
curr = curr.next.next;
}
curr = head.next;
while(curr != null || !q1.isEmpty()){
if(curr != null)
q2.offer(curr);
q2.offer(q1.poll()); //this line seems to be the problem
if(curr.next != null)
curr = curr.next.next;
else
curr = curr.next;
}
ListNode dummy = new ListNode(0);
curr = dummy;
while(!q2.isEmpty()){
dummy.next = q2.poll();
dummy = dummy.next;
}
return curr.next;
}
}
Я пробовал это, но получил сообщение об ошибке: Найден цикл в ListNode. Пожалуйста помоги. Когда я попробовал отладку, я обнаружил, что q2.offer(q1.poll());
, похоже, вызывает проблему.
PS Я знаю, что есть более простой способ решить этот вопрос, а именно, одна итерация и использование указателей . Но я немного новичок в программировании. Итак, я пробую что-то, но не могу понять, почему приведенный выше код выдает ошибку.