【发布时间】:2015-08-11 22:37:01
【问题描述】:
到目前为止,我没有太多东西,但我正在尝试掌握使用链表的窍门。
结构:
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 个链表头部的指针?),然后遍历所有节点的列表。
E.G:链表 1 有 3 个节点:4、10、20。 链表 2 有 4 个节点:2、5、15、60。
合并列表函数将生成一个以 2,4,5,10,15,20,60 作为节点的新链表。
编辑:在我的 main 中,我正在调用 addNode 函数,如下所示:
Node *head = new Node;
insertAtEnd(head,20);
这是正确的还是可能是异常的原因?
【问题讨论】:
-
我首先通过引用传递头指针。
Node *& head。否则你只是将指针值传递给这个函数,head = ...对调用者没有任何意义。 -
这里有一些一般性的提示(当然在你的课程材料中已经提到过): 1) 将节点添加到单链表的后面比将它添加到前面要慢得多。 2)您可以通过维护一个指向最后一个节点的迭代器(一个指针就足够了)来避免这种缓慢。这也避免了在合并时遍历任一列表。
-
@Bobo Amitheson 您如何合并列表?您是否必须使用新节点创建新的第三个列表,还是需要将所有节点从第二个列表移动到第一个列表?
-
我的目标是创建一个包含新节点的第三个列表。
-
@BoboAmitheson 在这种情况下,您无法避免像我建议的那样遍历列表,因为假设您正在修改列表。
标签: c++ linked-list