Java 多维四方向链表
好的。。所以我决定尝试用java来链接链表,而不是用C++来引用……<…>中的指针。 对于中心节点,遍历可以是上、下、左、右。对于角点中的节点,它们仅向两个方向移动,而边上的节点可以向三个方向移动。。所有其他人都可以移动4 问题: 当我的程序离开构造函数时,我的节点会以某种方式被删除:S当我使用get/set时,它无法遍历链接,因为它们为null。。除了第一个节点 我的节点是:Java 多维四方向链表,java,reference,linked-list,Java,Reference,Linked List,好的。。所以我决定尝试用java来链接链表,而不是用C++来引用……中的指针。 对于中心节点,遍历可以是上、下、左、右。对于角点中的节点,它们仅向两个方向移动,而边上的节点可以向三个方向移动。。所有其他人都可以移动4 问题: 当我的程序离开构造函数时,我的节点会以某种方式被删除:S当我使用get/set时,它无法遍历链接,因为它们为null。。除了第一个节点 我的节点是: package linkedlist; public class Node { public Node Up, D
package linkedlist;
public class Node {
public Node Up, Down, Left, Right;
public int Value;
public Node() {
Value = -1;
Up = Down = Left = Right = null;
}
}
我喜欢:
package linkedlist;
public class Matrix {
private int Width, Height;
private Node Reference;
public Matrix(int Width, int Height) {
Reference = new Node();
this.Width = Width; this.Height = Height;
Node RowIterator = Reference, ColumnIterator = Reference;
for (int I = 0; I < Height; ++I) {
for (int J = 0; J < Width; ++J) {
if (I == 0) {
if (J < Width - 1) {
RowIterator.Right = new Node();
RowIterator.Right.Left = RowIterator;
RowIterator = RowIterator.Right;
}
}
else {
if (I < Height - 1) {
ColumnIterator.Down = new Node();
}
RowIterator = ColumnIterator;
RowIterator.Right = new Node();
RowIterator.Up = ColumnIterator;
RowIterator.Up.Down = RowIterator;
RowIterator.Right.Left = RowIterator;
RowIterator.Right.Up = RowIterator.Up.Right;
RowIterator = RowIterator.Right;
ColumnIterator = ColumnIterator.Down;
}
}
}
}
public void SetValue(int I, int J, int Value) {
//Same as get except it sets rather than returns..
}
public int GetValue(int I, int J) {
RowIterator = ColumnIterator = Reference;
for (int K = 0; K < J; ++K) {
for (int L = 0; L < I; ++L) {
RowIterator = RowIterator.Right;
}
ColumnIterator = ColumnIterator.Down;
RowIterator = ColumnIterator;
}
return RowIterator.Value;
}
}
因此,当我试图将值设置在矩阵的中间附近时,它会抛出一个空指针错误。。如果我尝试在构造函数中设置它,它就可以正常工作。。因此,我的节点必须以某种方式得到垃圾清理。您在行上的迭代次数与在列上的迭代次数相同。例如,在您的示例中,访问的实际节点是(9,3),超出了
矩阵的界限
相反,您应该在行上迭代一次,然后在列上迭代一次
for (int K = 0; K < J; ++K) {
Iterator = Iterator.Down;
}
for (int L = 0; L < I; ++L) {
Iterator = Iterator.Right;
}
for(int K=0;K
有什么特别的原因不只是使用二维数组吗?我不明白。。矩阵为6 x 6,包含36个元素。。我迭代3 x 3,哪个应该是中心??:It’你的例子很有道理,但我不明白为什么我的错了。。我没有使用二维数组,因为我的老师决定挑战我,让我只使用节点/链表制作矩阵。@CantChooseServerNames在你的解决方案中,你将向右移动3个元素,然后向下移动1,然后向右移动3个元素,然后向下移动1,然后向右移动3个元素,然后向下移动1。Omg。。我懂了!谢谢你睁开我的眼睛。我接受你的回答。
for (int K = 0; K < J; ++K) {
Iterator = Iterator.Down;
}
for (int L = 0; L < I; ++L) {
Iterator = Iterator.Right;
}