public static Node insertInOrder()
{
Node first=getNode(inFile.next());
Node current=first,previous=null;
Node last=first;
int count=0;
while (inFile.hasNext())
{
if (previous!=null
&& ((String)current.value).compareTo((String)previous.value) > 0)
{
last.next=previous;
previous=last;
}
if (previous!=null
&& ((String)current.value).compareTo((String)previous.value) < 0)
{
current.next=last;
last=current;
}
previous=current;
current=getNode(inFile.next());
}
return last;
}
Прежде всего, вы ничего не делаете с последней строкой, прочитанной из файла, поэтому она никогда не вставляется.Вы должны прочитать строку и создать новые Node
перед повторным связыванием next
указателей.
Затем, если last
и previous
ссылаются на те же Node
и данные current
больше, чем previous
,
if (previous!=null
&& ((String)current.value).compareTo((String)previous.value) > 0)
{
last.next=previous;
previous=last;
}
Вы устанавливаете last.next = last
, ломая список.Из кода (в частности, отсутствия функции sort(Node)
) кажется, что вы хотите отсортировать список по мере его создания.Но вы только когда-либо сравниваете каждый новый Node
друг с другом, так что это не поддерживает порядок.
Для каждого нового узла вы должны найти узел, после которого он должен быть вставлен, сканируя сперед списком и измените current.next
и next
.
предшественника.