到目前为止,我还没有太多工作,但我正在尝试使用链接列表。合并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你如何合并列表?您是否必须创建一个新的第三个列表,或者是否需要将第二个列表中的所有节点移至第一个列表? –