Я пытаюсь решить эту алгоритмическую проблему на основе структуры связанных списков. Вопрос заключается в следующем:Разделение связанного списка
Учитывая связанный список и значение x, разделите его так, чтобы все узлы, меньшие x, приходили к узлам, большим или равным x. Вы должны сохранить исходный относительный порядок узлов в каждом из двух разделов.
Например,
Учитывая, 1-> 4-> 3-> 2-> 5-> 2 и х = 3, возврата 1-> 2-> 2-> 4- > 3-> 5.
Мое решение проблемы:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null) return null;
ListNode headNode = new ListNode(-1);
headNode.next = head;
ListNode tail = head;
while(tail.next!=null){
tail = tail.next;
}
ListNode actualTail = tail;
ListNode current = headNode;
while(current!=actualTail && current.next!=actualTail){
if(current.next.val >= x && current.next!=tail){
System.out.println("Moving "+current.next.val+" to end of list, ahead of "+tail.val);
ListNode temp = current.next;
current.next = current.next.next;
tail.next = temp;
tail = tail.next;
tail.next = null;
}else{
current = current.next;
}
}
return headNode.next;
}
}
Хотя некоторые тестовые примеры хорошо работают с этим кодом, например, как описанное выше, существует множество тестов, которые не в том, что я не могу для поддержания первоначального относительного упорядочения узлов в списке.
Например: список = [1-> 2] х = 0
Мой результат: [2,1]
Ожидаемое: [1,2]
Любой Помощь будет принята с благодарностью.
почему 4 в левом боковая сторона ? – raven
все узлы, меньшие x, попадают на узлы, которые больше или равны x. Также сохраните первоначальный относительный порядок. –