我正在使用Java中的Linked List。我试图获取我存储在节点(AB)中的值,并将其添加到我存储在另一个节点(BC)中的值。到目前为止,我已成功将值存储在链表中。现在我想检索 int 数据并将它们分配给变量并将这些变量添加到一起。 例如ABC = AB + BC。
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 :(得分: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的孩子 - > 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;
}
}
您应该直接在Node类中建立节点之间的关系。
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}
}
有了这个,从长远来看,你已经使事情更具凝聚力,更容易使用。
答案 1 :(得分:0)
我回过头看了代码,我看到了我的错误以及评论中的线索,感谢每个人的注意力。第一个是我的.add()我在Node中添加了一个数组而不是int值。第二个是我在Node中使用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);
}}