2017-12-07 7 views
2

노드리스트를 만들려고하고 있는데,리스트가 루프로 바뀐다 고 생각하지만 어떻게 될지 모르겠습니다! 다음은이를 수행하는 데 사용되는 두 가지 방법입니다.무한 링크드리스트 문제

GraphNode 클래스

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); 
    } 
}