Я пересматриваю алгоритмы и DS в Java, и я смог выполнить задачи в течение 4 часов, выявляя проблему и выясняя шаблон, чтобы выполнить все тестовые примеры в рамках курса. Проблема относится к связанным спискам, с задачами, которые вы должны обратить вспять между двумя узлами, данными вам. Я вижу много повторяющегося кода в моем решении, но я не уверен, как его улучшить. Я обнаружил, что часто пытаюсь решить проблему и поддерживать низкую сложность времени, какие предложения у вас есть при усовершенствовании моих навыков, когда придумываете решение? Я также принял во внимание количество времени, которое я занимаю, но это было трудно для меня лично.
Coding reffice + тестовые случаи < /p>
public void reverseBetween(int m, int n){
// creating dummy nodes to keep order of orig. list while swapping
Node beforefirstNode = new Node(0);
Node middleofSwap = new Node(0);
Node aftersecondNode = new Node(0);
Node firstheadPointer = beforefirstNode;
Node secondheadPointer = middleofSwap;
Node lastheadPointer = aftersecondNode;
// Nodes to store nodes m,n, and traversing node
Node firstNode = new Node(0);
Node secondNode = new Node(0);
Node temp = getHead();
// condition ensures that there is atleast 1 node between for swap,
// and that it doesn't exceed length of list
int swapdist = n - m;
if (swapdist >= 1 && length > 1){
for(int i = 0; i < length; i++){
if (i < m) {
beforefirstNode.next = temp;
temp = temp.next;
beforefirstNode = beforefirstNode.next;
beforefirstNode.next = null;
}
else if (i == m) {
firstNode = temp;
temp = temp.next;
firstNode.next = null;
} else if (i > m && i < n) {
middleofSwap.next = temp;
temp = temp.next;
middleofSwap = middleofSwap.next;
middleofSwap.next = null;
} else if (i == n) {
secondNode = temp;
temp = temp.next;
secondNode.next = null;
aftersecondNode.next = firstNode;
aftersecondNode = aftersecondNode.next;
aftersecondNode.next = null;
} else {
aftersecondNode.next = temp;
temp = temp.next;
aftersecondNode = aftersecondNode.next;
aftersecondNode.next = null;
}
}
// putting second node onto first partitioned list
beforefirstNode.next = secondNode;
beforefirstNode = beforefirstNode.next;
// combining into a single list
// list 3 => list 2
middleofSwap.next = lastheadPointer.next;
lastheadPointer = null;
// list 2 => list 1
beforefirstNode.next = secondheadPointer.next;
secondheadPointer = null;
// have head point to first node, setting pointer to null;
head = firstheadPointer.next;
firstheadPointer = null;
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-forward
Как мне улучшить свое решение для кодирования и каковы способы улучшения движения вперед? [закрыто] ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение