Когда я добавляю новые узлы в конец связанного списка, он работает нормально, но затем, когда я пытаюсь добавить узел, уже являющийся частью списка, скажем list.getHead()
, он добавляет его, но избавляется от всегоранее в списке и устанавливает размер до 1. Это также то же самое, если я создаю второй связанный список и пытаюсь добавить узел из первого связанного списка во второй связанный список (т. е. secondLinkList.appendList(firstLinkList.getHead())
. I 'Я действительно сбит с толку, потому что моя функция добавления работает нормально, поэтому я не знаю, в чем еще может быть проблема.
public static void main(String[] args) throws IOException
{
Scanner fileReader = null;
Scanner input = new Scanner(System.in);
String inputFilename;
inputFilename = input.nextLine();
File inFile = new File(inputFilename);
try {
fileReader = new Scanner(inFile);
}
catch (FileNotFoundException e)
{
input.close();
throw e;
}
LinkList<Player> list = new LinkList<>();
while(fileReader.hasNextLine())
{
Player player = null;
boolean multipleEntries = false;
String line = fileReader.nextLine();
String name = line.substring(0, line.indexOf(' '));
if(list.getHead() == null) // If no node in linked list
{
player = new Player();
player.setName(name);
}
else
{
for(Node<Player> n = list.getHead(); n != null; n = n.getNext()) // Checks for duplicate names in file
{
if(n.getData().getName().equals(name)) // If duplicate names in files, combine into 1 player by adding stats to first occurence of player
{
player = n.getData();
multipleEntries = true;
}
if(multipleEntries)
break;
else if(n.getNext() == null) // If no duplicate names in file, create new player
{
player = new Player();
player.setName(name);
}
else
continue;
}
}
String battingRecord = line.substring(line.indexOf(' ') + 1, line.length());
int battingRecordSize = 0;
for(int i = 0; i < battingRecord.length(); i++)
battingRecordSize++;
char[] battingRecordArray = new char[battingRecordSize];
for(int i = 0; i < battingRecordSize; i++)
battingRecordArray[i] = battingRecord.charAt(i);
for(int i = 0; i < battingRecordArray.length; i++)
{
switch(battingRecordArray[i])
{
case 'H':
player.setHits(player.getHits() + 1);
break;
case 'O':
player.setOuts(player.getOuts() + 1);
break;
case 'K':
player.setStrikeOuts(player.getStrikeouts() + 1);
break;
case 'W':
player.setWalks(player.getWalks() + 1);
break;
case 'P':
player.setHitByPitches(player.getHitByPitches() + 1);
break;
case 'S':
player.setSacrifices(player.getSacrifices() + 1);
break;
default:
break;
}
}
if(!multipleEntries)
{
Node<Player> node = new Node<>(player);
list.appendList(node);
System.out.println("T: " + list.getListSize(list.getHead()));
}
}
// Outputs to file in append mode to prevent overwriting lines
FileWriter output = new FileWriter("leaders.txt", true);
BufferedWriter bWriter = new BufferedWriter(output);
// Sort list alphabetically
list.sortAlphabetically(list.getHead());
//list.destroyLinkList();
// Print player data in alphabetical order
//System.out.println(list.getHead().getData().getName());
list.displayPlayerData(list.getHead());
// Print leaders
//list.displayLeaders(list.getHead());
int totalNumLeaders;
int firstCounter, secondCounter;
int listSize = list.getListSize(list.getHead());
LinkList<Player> names = new LinkList<>();
Node<Player> test = list.getHead();
Node<Player> cnt = list.getHead();
System.out.println("list before: " + list.getListSize(list.getHead()));
System.out.println("names before: " + names.getListSize(names.getHead()));
while(cnt != null)
{
System.out.println(cnt.getData().getName());
cnt = cnt.getNext();
}
names.appendList(test);
System.out.println("list after: " + list.getListSize(list.getHead()));
System.out.println("names after: " + names.getListSize(names.getHead()));
cnt = list.getHead();
while(cnt != null)
{
System.out.println(cnt.getData().getName());
cnt = cnt.getNext();
}
}
}
Вот некоторые из моих классов LinkList:
public class LinkList<T> {
private Node<T> head;
static final int NUM_LEADER_CATEGORIES = 5;
public LinkList()
{
head = null;
}
public LinkList(Node<T> n)
{
head = n;
}
public void appendList(Node<T> n)
{
if(head != null)
{
Node<T> iter = head;
while(iter.getNext() != null)
{
iter = iter.getNext();
}
iter.setNext(n);
iter.getNext().setNext(null);
return;
}
else
{
head = n;
head.setNext(null);
return;
}
}