2016-09-30 3 views
1

Я работаю со связанным списком на Java. Я пытаюсь получить значение, которое храню в узле (AB), и добавить его в значение, которое я храню в другом узле (BC). Я до сих пор успешно сохранял значения в связанном списке. Теперь я хотел бы получить данные int и назначить их переменной и добавить эти переменные вместе. , например, ABC = AB + BC.Как добавить значения данных в связанный список?

код TrainRouteList:

public class TrainRouteList { 


Node head; 
Node tail; 

public void add(Node node){ 

    if (tail == null){ 
     head = node; 
     tail = node; 
    } 

    tail.next = node; 
    tail = node; 
}} 

код класса тестирования:

public class LinkedListTest { 
@Test 
public void test(){ 
    TrainRouteList list = new TrainRouteList(); 

    list.add(new Node(new int[5], new String("AB")));//AB5 
    list.add(new Node(new int[4], new String("BC")));//BC4 
    list.add(new Node(new int[8], new String("CD")));//CD8 
    list.add(new Node(new int[8], new String("DC")));//DC8 
    list.add(new Node(new int[6], new String("DE")));//DE6 
    list.add(new Node(new int[5], new String("AD")));//AD5 
    list.add(new Node(new int[2], new String("CE")));//CE2 
    list.add(new Node(new int[3], new String("EB")));//EB3 
    list.add(new Node(new int[7], new String("AE")));//AE7 
} } 
+0

Какой код для 'TrainRouteList'? –

+2

Что такое 'Node' и' TrainRouteList'? Что вы пробовали? –

+0

... и почему 'new String (" aString ")'? –

ответ

1

Это зависит от того, как у вас есть TrainRouteList объект структурирован. Как правило, для связанного списка у вас есть указатель на корень из списка:

Node currNode = TrainRouteList.getRoot(); 

Затем, используя этот корень, вы можете пройти через связанный список:

int globalInt = 0; 
while(currNode != null) 
{ 
    if(currNode.getStr().equalsIgnoreCase("ab")) 
    { 
    globalInt += currNode.getVal(); 
    } 
    else if(currNode.getStr().equalsIgnoreCase("bc")) 
    { 
    globalInt += currNode.getVal(); 
    } 
    else 
    { 
    currNode = currNode.getChild(); 
    } 
} 

Опять же, это зависит от того, как иметь свой Связанный список настройки:

Root -> Ребенок Root -> Ребенок ребенка от корня -> и т.д.

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

Ossss

Основываясь на вашем реализации класса TrainRouteList, это может быть проще для вас, чтобы изменить его таким образом:

public class TrainRouteList{ 

    private Node root; 

    public TrainRouteList(Node root) 
    { 
     this.root = root; 
    } 

    public Node getRoot(){ 
     return this.root; 
    } 

    public void setRoot(Node r) 
    { 
     this.root = r; 
    } 
} 

Вы должны установить связь между узлами непосредственно в Класс узла.

public class Node{ 

    private int val = 0; 
    private String str; 
    private Node child = null; 

    public Node(int val, String strVal) 
    { 
     this.val = val; 
     this.str = strVal; 
    } 

    //Getter + setter for object properties 
    public void setVal(int val)  {this.val = val}; 
    public int getVal()    {return this.val}; 
    public void setStr(String str) {this.str = str;} 
    public String getStrt()   {return this.str;} 

    //Getter + Setter for child node 
    public void setChild(Node c) {this.child = c;} 
    public Node getChild()   {return this.child} 
} 

С этим вы сделали вещи более сплоченными и с ними легче работать в долгосрочной перспективе.

0

Я вернулся через код, и я увидел свои ошибки с подсказками из комментариев, благодарю всех за то, что они вздрогнули. Первый был в моем .add() Я добавлял массив в Node, а не в значение int. Во-вторых, я сохранял строку в узле с данными int. Поскольку я знаю положение каждого узла, нет необходимости хранить строку с int (я не уверен, что строка и int могут храниться в одном узле.) Затем я назначил позицию переменной, поэтому Мне не нужно было хранить строку в узле.

public class LinkedListTest { 



@Test 
public void test(){ 
    TrainRouteList list = new TrainRouteList(); 

    list.add(new Node(5));//AB5 
    list.add(new Node(4));//BC4 
    list.add(new Node(8));//CD8 
    list.add(new Node(8));//DC8 
    list.add(new Node(6));//DE6 
    list.add(new Node(5));//AD5 
    list.add(new Node(2));//CE2 
    list.add(new Node(3));//EB3 
    list.add(new Node(7));//AE7 

    // 
    int AB = list.head.data; 
    int BC = list.head.next.data; 
    int ABC = AB + BC; 

    System.out.println("The Distance of A-B-C is " + ABC); 


}} 
Смежные вопросы