簡體   English   中英

將鏈接列表組織成C ++中的一系列鏈接列表

[英]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->nextNULL ,您的代碼將不會處理整個列表。 而是應如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM