[英]Organize a linkedlist into an array of linkedlist in C++
我正在編寫一個方法,該方法采用一個函數,該函數采用鏈表的根和圖中的頂點數,並根據邊結構的第一個頂點將鏈表組織成鏈表的數組,例如,如果節點Edge的firVertex = 1,sndVertex = 2,權重= 2,則該結構將被排序到數組的第一個元素中。 另一個具有另一個firVertex = 1的節點Edge將會附加到前一個節點上,依此類推。我的代碼可以編譯,但它並不能完全滿足我的要求。 請幫忙。
您的代碼中有很多問題。
在將newNode
分配給數組列表的元素時,它應該是
arrayList[j]= newNode; //not 'i' since i=numberVertices always....
當找到與j
匹配的firVertex
,您將創建一個指向當前節點的臨時指針。 然后您正在執行此操作:
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...
}
希望這會有所幫助...並且我強烈感到您需要了解有關指針的更多信息,然后開始編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.