// Я написал код Java для метода вставки в дважды связанном списке, но при его запуске существует бесконечный цикл //. Я пытаюсь найти ошибку, но пока не нашел. какие-либо предложения? // это вызов вспомогательной функцииinsertion сортировать по связанному списку
public IntList insertionSort () {
DListNode soFar = null;
for (DListNode p=myHead; p!=null; p=p.myNext) {
soFar = insert (p, soFar);
}
return new IntList (soFar);
}
// values will be in decreasing order.
private DListNode insert (DListNode p, DListNode head) {
DListNode q=new DListNode(p.myItem);
if(head==null){
head=q;
return head;
}
if(q.myItem>=head.myItem){
DListNode te=head;
q.myNext=te;
te.myPrev=q;
q=head;
return head;
}
DListNode a;
boolean found=false;
for(a=head; a!=null;){
if(a.myItem<q.myItem){
found=true;
break;
}
else{
a=a.myNext;
}
}
if(found==false){
DListNode temp=myTail;
temp.myNext=q;
q.myPrev=temp;
myTail=q;
return head;
}
if(found==true){
DListNode t;
t=a.myPrev;
a.myPrev=q;
t.myNext=q;
q.myPrev=t;
q.myNext=a;
}
return head;
}
спасибо. Я исправил ошибки, и теперь это работает. Можете ли вы объяснить, почему myTail не работал, как я ожидал. Я до сих пор не уверен в этом. Я удалил myTail и изменил, как вы предложили. –
Я предполагаю, что 'myTail' первоначально указывал на последний узел в несортированном списке. 'temp' создается как указание на' myTail', и это используется как основа для вставки 'q'. Что действительно происходит, вы прикрепляете 'q' к концу несортированного (входного) списка, следовательно, почему этот список потенциально может продолжать расти и переоценивать узлы. Я бы предложил составить список с некоторыми указателями на узлы, чтобы пройти через него визуально.Если этот ответ ответил на ваш вопрос, пожалуйста, «Примите» его в качестве ответа, поэтому вопрос будет отмечен как ответ. –