Наличие некоторых проблем с односвязным списком в Java

1

Я пытаюсь создать отдельный список, где я могу добавить узлы, которые будут иметь целочисленное значение и следующее значение. Мне нужно пройти этот список, чтобы добавить элементы списка. Все должно быть в пределах одного файла. Я новичок в java и могу использовать некоторую помощь. Вот мой код:

package LargestSum;
import java.io.*;
import java.util.Scanner;

public class LargestSum {
   public static class LinkedList {

private int num;
private LinkedList node;    
private LinkedList head;
private LinkedList tail;
private int listSize;
public LinkedList next;

public LinkedList(){

    node = null;
    num = 0;
    head = null;
    tail = null;
    listSize = 0;
}

public void setLink(LinkedList l){
    node = l;
}

public void setNum(int n){
    num = n;
}

public LinkedList getNode(){
    return node;
}
public int getNum(){
    return num;
} 

public boolean empty(){
    return head == null;
}

public int getListSize(){
    return listSize;
}

public void insert(int set){
    LinkedList list = new LinkedList();
    listSize++;
    if(head == null){
        head = list;
        tail = head;

    }
    else {
        tail.setLink(list);
        tail = list;
    }
 }
 }

public static void main(String[] args)  throws IOException {
     String fileName = "in.txt";
     LinkedList list = new LinkedList();
     Scanner numbers = new Scanner(new File(fileName));
     while(numbers.hasNext()){
        int num = numbers.nextInt();
        list.insert(num);
        System.out.println(num);
     } 
     int listSize = list.getListSize();
} 
}

Я был бы признателен за любую помощь и указатели. Спасибо.

Теги:
linked-list

1 ответ

1

Проблема в вашем коде заключается в том, что вы инициализируете связанный список при каждом добавлении элемента. поэтому каждый узел не связан друг с другом. что вы можете сделать, это сделать два класса: 1) узел и 2) LinkedList

узел будет иметь контейнерный элемент, который обозначает элемент в LinkedList. Класс LinkedList будет иметь все функциональные возможности, которые вы хотите сделать.

Я внес изменения в свой код, а не вставляя весь новый код. так что вы можете понять разницу между ними, сравнив свой код с ним.

//package LargestSum;
import java.io.*;
import java.util.Scanner;

public class Test {

    public static class node{
        int num;
        node next;

        public node(int num){
            this.num = num;
            next = null;
        }
        public node getNext(){
            return next;
        }
        public void setNext(node t){
            this.next = t;
        }
        public int getNum(){
            return this.num;
        }
    }


   public static class LinkedList {

//private int num;
//private LinkedList node;    
private node head;
private node tail;
private int listSize;
//public LinkedList next;

public LinkedList(){

//    node = null;
//    num = 0;
    head = null;
    tail = null;
    listSize = 0;
}

//public void setLink(LinkedList l){
//    node = l;
//}

//public void setNum(int n){
//    num = n;
//}

//public LinkedList getNode(){
//    return node;
//}
//public int getNum(){
//    return num;
//} 

public boolean empty(){
    return head == null;
}

public int getListSize(){
    return listSize;
}

public void print(){
    node traverse = head; 
    while(traverse!=null){
        System.out.println(traverse.getNum());
        traverse = traverse.getNext();
    }

}

public void insert(int set){
  //  LinkedList list = new LinkedList();
  node temp = new node(set);

    listSize++;
    if(head == null){       
        head = temp;
        tail = temp;
    }
    else {
        tail.setNext(temp);
        tail = tail.getNext();
    }
 }
 }

public static void main(String[] args)  throws IOException {
    // String fileName = "in.txt";
     LinkedList list = new LinkedList();
     Scanner numbers = new Scanner(System.in);
     int x=10;
     while(x >0){
        int num = numbers.nextInt();
        list.insert(num);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
        list.print();
        x--;
     } 
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
        list.print();
     int listSize = list.getListSize();
} 
}

Здесь я реализовал очень простой. вы не можете добавить другие функции в этот код напрямую. если вы хотите добавить другой, просто используйте этот тип двух классов, как я использовал здесь, и добавьте функции в класс LinkedList.

Если у вас есть какие-либо дальнейшие комментарии, комментируйте меня.

Благодаря,

Bhavik

  • 0
    В методе empty() вы также должны установить listSize в ноль. Кроме того, с точки зрения полноты, вы можете также установить tail в null .
  • 0
    да, приятель, я указал в документации, что это просто небольшой кусок кода, который показывает, где он совершает ошибку ... ему нужно вносить изменения в соответствии со своими потребностями ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню