到目前爲止,我還沒有太多工作,但我正在嘗試使用鏈接列表。合併2個鏈接列表並追加到鏈接列表的末尾C++
結構:
struct Node
{
int value;
Node *next;
};
我如何添加一個節點到列表的末尾?我只是試圖接受一個列表頭和一個int值的指針作爲新節點添加。當我嘗試運行我目前有的異常時。
void addNode(Node* head, int x)
{
Node* temp = new Node;
temp->data = x;
temp->next = NULL;
if(!head)
{
head = temp;
return;
}
else
{
Node* last = head;
while(last->next)
last=last->next;
last->next = temp;
}
}
我還沒有真正開始合併這兩個列表。我只知道我需要接收2個鏈表(或指向2個鏈表的頭部的指針?),然後遍歷所有節點的列表。
EG:鏈表1具有3個節點:4,10,20 鏈表2具有4個節點:2,5,15,60
合併列表功能將導致一個新的鏈接列表以2,4,5,10,15,20,60作爲節點。
編輯:在我的主,我打電話的ADDNODE功能,像這樣:
Node *head = new Node;
insertAtEnd(head,20);
那是正確的或會是異常的原因是什麼?
我會通過引用傳遞頭指針開始。 'Node *&head'。否則,你只是將指針值傳遞給這個函數,'head = ...'對調用者沒有任何意義。 – WhozCraig
這裏有一些一般的技巧(當然在你的課程材料中已經提到過):1)將一個節點添加到單個鏈表的後面比將它添加到前面要慢得多。 2)通過維護一個迭代器(一個指針應該足夠)到最後一個節點,你可以避免這種緩慢。這也避免了在合併時通過任一列表運行。 – user2079303
@Bobo Amitheson你如何合併列表?您是否必須創建一個新的第三個列表,或者是否需要將第二個列表中的所有節點移至第一個列表? –