2017-12-07 19 views
2

ノードリストを作成しようとしていますが、リストがループに変わったと思いますが、どうやって解決できないのでしょうか?以下は、これを行うために使用される2つの方法です。無限リンクリストの問題

グラフノードクラス

public class GraphNode { 
public int nodeID; 
public int color; 
public int numEdges; 
public GraphNode next; 

public GraphNode() { 
    nodeID = 0; 
    color = 0; 
    numEdges = 0; 
    next = null; 
} 

public GraphNode(int id, int e) { 
    nodeID = id; 
    color = 0; 
    numEdges = e; 
    next = null; 
} 

public void setNext (GraphNode next) { this.next = next; } } 

constructNodeList法(numNodes = 19、それは入力ファイルから読み込む)これは昇順で各ノードを挿入する必要があり

public void insertOneNode(GraphNode newNode) { 
    GraphNode current = listHead; 
GraphNode temp = current; 

    while (current.next != null && newNode.numEdges > current.next.numEdges) { 
     current = current.next; 
    } 
    if (current.next == null) current.setNext(newNode); 
    else { 
     temp = current.next; 
     current.setNext(newNode); 
     newNode.next = temp; 
    } 
} 

public void constructNodeList(GraphNode p) { 
    int edgeCount; 
    for (int i = 0; i < numNodes; i++) { 
     edgeCount = 0; 
     for (int j = 0; j < numNodes; j++) { 
      System.out.println((i+1) + ", " + (j+1) + ": " + adjMatrix[i][j]); 
      if (adjMatrix[i][j] == 1) edgeCount++; 
     } 
     p.nodeID = i+1; 
     p.numEdges = edgeCount; 
     System.out.println(p.nodeID + ": " + p.numEdges); 
     insertOneNode(p); 
    } 
} 

insertOneNode方法各ノードのnumEdgesによって示されます。しかし、それぞれの挿入後にリンクされたリストを印刷しようとすると、リストの最初のノードと思われるものを無制限に印刷します。

答えて

0

人々に尋ねたり、オンラインで検索したりしていたほぼ一日のうちに、一人は何が間違っているのか最終的に知りました。

このような簡単なことは、いつものように! constructNodeListメソッドは毎回同じノードを再利用します。したがって、同じノードが書き換えられ、挿入されたノードの同じ「次の」ノードが作成されます。したがって、これを修正するには、新しいメソッドは今すぐ:

public void constructNodeList() { 
    int edgeCount; 
    for (int i = 0; i < numNodes; i++) { 
     edgeCount = 0; 
     for (int j = 0; j < numNodes; j++) { 
      //System.out.println((i+1) + ", " + (j+1) + ": " + adjMatrix[i][j]); 
      if (adjMatrix[i][j] == 1 && i != j) edgeCount++; 
     } 
     GraphNode p = new GraphNode(); // new node every time! 
     p.nodeID = i+1; 
     p.numEdges = edgeCount; 
     System.out.println(p.nodeID + ": " + p.numEdges); 
     insertOneNode(p); 
    } 
} 
関連する問題