У меня небольшая проблема со связанным списком. Я генерирую 40 случайных целых, используя случайный объект из случайного класса и добавляю их в связанный список. Это также использует указанное семя. Все отлично работает без этой ошибки. Первое, что печатается в консоли / выводе, это связанный список со случайно сгенерированными 40 дюймами. Затем я пытаюсь отсортировать список, используя сортировку по убыванию, в которой, как мне кажется, и заключается моя ошибка. Моя попытка "уменьшения алгоритма сортировки вставок" делается в методах isdRecI и isdRecII, они рекурсивные (будьте осторожны, большие части этой программы рекурсивны, поэтому, если вы не знакомы с рекурсией, остерегайтесь) После завершения сортировки я хочу снова напечатать связанный список в порядке убывания. Пожалуйста, постарайтесь сделать его как можно более простым, и если вам нравится мой стиль кода, так как я начинающий Java, то есть, пожалуйста, не усложняйте его. Как вы можете видеть, если вы скомпилируете мой код, вы увидите дубликаты в отсортированном виде. Мой код указан ниже. Я также хорошо понимаю концепцию связанного списка и сортировки вставки, но мне не хватает времени, чтобы заставить код выводить так, как я хочу. Пожалуйста, не стесняйтесь изменять мои методы. Спасибо за ваше время и вклад.
public class Node
{
private int data = 0;
Node next;
public Node (int datax) //constructor
{
data = datax;
next = null;
}
public int getData() // get the data value
{
return data;
}
public void setData(int datax) // sets the data value
{
data = datax ;
}
public void print() // print node data on one line.
{
System.out.print(data + " ");
}
public Node getNext()
{
return (next);
}
public void setNext(Node nextx)
{
next = nextx;
}
}
import java.util.Random;
public class MySort
{
Node head;
/*
* This method appends iteratively to the end of the linked list
*/
public void appendIter(int datax)
{
Node newNode = new Node(datax);
Node rightpointer = head;
if (rightpointer == null)
{
head = newNode;
return;
}
else
{
while (rightpointer.getNext() != null)
{
rightpointer = rightpointer.getNext();
}
rightpointer.setNext(newNode);
}
}
/*
* This method passes the data to isdRecI
*/
public void isRecI(MySort unsortedList)
{
isRecII(head);
}
public void isRecII(Node unsortedPointer)
{
int data;
if(unsortedPointer == null)
{
return;
}
data = unsortedPointer.getData();
isdRecI(data);
isRecII(unsortedPointer.getNext());
}
/*
* This method sorts the data using insert sort and sorts in decreasing order
*
*/
public void isdRecI(int dx)
{
head = isdRecII(head, dx);
}
public Node isdRecII(Node hp, int dx)
{
Node nxp;
/*
if(hp == null)
{
nxp = new Node(dx); // commented out for testing purposes please uncomment if you need
return nxp;
}
*/
if(dx >= hp.getData())
{
nxp = new Node(dx);
nxp.setNext(hp);
return nxp;
}
hp.setNext(isdRecII(hp.getNext(),dx));
return hp;
}
/*
* This method is an iterative print method for the linked list
*/
public void print()
{
System.out.println("print list start: ");
Node nextrightpointer = head;
while (nextrightpointer != null)
{
nextrightpointer.print();
nextrightpointer = nextrightpointer.getNext();
}
System.out.println("print list end");
}
public static void main(String[] args)
{
MySort SortObject = new MySort ();
Random random = new Random(12345);
for(int i=0; i < 40;i++)
{
SortObject.appendIter(random.nextInt(200));
}
SortObject.print();
SortObject.isRecI(SortObject);
System.out.println();
SortObject.print();
}
}
Также включая вывод:
начало списка печати:
51 80 41 28 55 84 175 2 101 189 117 142 190 6 12 184 187 103 132 175 1 151 192 116 28 181 25 143 71 39 129 197 101 25 103 155 152 31 10 108 конец списка печати
(после сортировки // это не печатается только к вашему сведению)
начало печати списка:
197 192 190 189 187 184 181 175 175 155 152 151 143 142 132 129 117 116 108 103 103 101 101 84 80 71 55 51 51 80 41 41 39 31 28 28 28 55 84 175 25 25 12 10 6 2 2 101 189 117 142 190 6 12 184 187 103 132 175 1 1 151 192 116 28 181 25 143 71 39 129 197 101 25 103 155 152 31 10 108 конец списка печати