4
好吧..所以我決定嘗試在Java中鏈表,而不是我已經習慣了引用的指針在平時的C++ ..多維四方向鏈表
遍歷可以向上,向下,左,右爲一箇中心節點。對於在彎道中的節點,他們只移動兩個方向節點上的邊緣可以移動3個方向。所有其他可移動4.
問題:
當我的程序離開的構造,我的節點被不小心刪除:S當我使用get/set時,它不能遍歷鏈接,因爲它們是空的。除了第一個節點。
我的節點是:
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;
}
}
和主像:
package linkedlist;
public class LinkedList {
public static void main(String[] args) {
Matrix M = new Matrix(6, 6);
M.SetValue(3, 3, 10);
}
}
所以,當我試圖設置在靠近中間值的矩陣,它會拋出一個空指針錯誤..如果我試圖在構造函數中設置它,它工作得很好..因此,我的節點必須是索姆ehow越來越垃圾清理..
我不明白..矩陣是6 x 6其中有36個元素。 我迭代3 x 3這應該是中心? :S 你的例子是有道理的,但我看不出爲什麼我錯了。 我沒有使用二維數組,因爲我的老師決定挑戰我,並要求我使用節點/鏈接列表只有.. – Brandon
@CantChooseUsernames在你的解決方案中,你會右鍵3個元素,然後下降1,然後右3個元素,然後下降1,然後右3個元素,然後下降1. –
Omg ..我明白了!阿哈哈謝謝你打開我的眼睛。我會接受你的回答。 – Brandon