Почему при добавлении узла в конец связанного списка он сбрасывает размер и узлы в списке? - PullRequest
0 голосов
/ 10 октября 2019

Когда я добавляю новые узлы в конец связанного списка, он работает нормально, но затем, когда я пытаюсь добавить узел, уже являющийся частью списка, скажем 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;
    }
}
...