在C ++中将链表组织成一个链表列表

时间:2014-01-22 05:56:25

标签: c++ arrays pointers linked-list

我正在编写一个方法,该方法采用一个函数,该函数采用链表的根和图中的顶点数,并根据边结构的第一个顶点将链表组织成链表的数组,例如,在节点Edge具有firVertex = 1,sndVertex = 2和weight = 2的结构中,它将被排序到数组的第一个元素中。另一个节点具有另一个firVertex = 1的节点将被附加到前一个节点等等。我的代码编译但它并不完全按照我的意愿行事。请帮忙。

1 个答案:

答案 0 :(得分:0)

您的代码中存在许多问题。

在将newNode分配给数组列表的元素时,它应该是

arrayList[j]= newNode; //not 'i' since i=numberVertices always....

当您找到与firVertex匹配的j时,您正在创建一个指向当前节点的临时指针。然后你这样做:

newNode -> next = NULL;

它实际上将给定列表中节点的next更改为NULL,从而将current->next设为NULL,您的代码将不会处理整个列表。它应该如下:

Edge* newNode = new Edge(current);//create a copy of the 'current' node..
newNode -> next = NULL;//now make the 'next' of this node NULL..

上述代码可防止列表进行任何修改。我还假设有Edge的构造函数,它将另一个Edge指针作为参数。

正如您在问题中指定的那样,如果您有两个Edge个节点具有相同的firVertex,则您希望将它们附加到同一列表中。但是您的代码只是覆盖了前一个节点。 为了防止这种情况,可以写成如下:

Edge* newNode = new Edge(current);
newNode -> next = NULL;
Edge* tmp = arrayList[j];
if(tmp==NULL)//then this is the first node..
{
     arrayList[j] = new Edge(current);
     arrayList[j]->next = NULL;
}
else
{
    while(tmp->next!=NULL)//go to the end of the list...
      tmp = tmp->next;
   tmp->next = new Edge(current);//create a copy of the 'current' node...
   tmp->next->next=NULL;//make the next of this new node NULL...
}

希望这有帮助...我强烈认为你需要了解更多关于指针然后开始编码。