C++ 如何合并两个双链接列表(访问下一个链接)

C++ 如何合并两个双链接列表(访问下一个链接),c++,linked-list,doubly-linked-list,C++,Linked List,Doubly Linked List,我正在尝试合并两个双链接列表。我已经创建了一个函数,可以按正确的顺序插入一个新节点。这些参数是我的教授设定的,所以我不能更改它们。我可以将第一项添加到列表1,但无法再添加 我在尝试继续遍历列表2并向列表1添加更多项时出错。我尝试过递归和do-while循环。在尝试使用do While循环时 struct nodeType{ int info; nodeType *next; nodeType *back; }; class OrderedDoublyLinkedList{ public:

我正在尝试合并两个双链接列表。我已经创建了一个函数,可以按正确的顺序插入一个新节点。这些参数是我的教授设定的,所以我不能更改它们。我可以将第一项添加到列表1,但无法再添加

我在尝试继续遍历列表2并向列表1添加更多项时出错。我尝试过递归和do-while循环。在尝试使用do While循环时

struct nodeType{
int info;
nodeType *next;
nodeType *back;
};

class OrderedDoublyLinkedList{
public:
    //Insert x in appropriate place in the list to keep it 
    sorted
    void insertNode(int x);
    void mergeLists(OrderedDoublyLinkedList &List1, 
    OrderedDoublyLinkedList &List2);

private:
    int count;
    nodeType *first;
    nodeType *last;
};

void 
OrderedDoublyLinkedList::mergeLists(OrderedDoublyLinkedList 
&List1, OrderedDoublyLinkedList &List2){

//First Technique
do{
    List1.insertNode(List2.first->info);
    List2.first->next; //Error: Expresion result unused
}
while(List2.first!=NULL)

//Second Technique
while(List2.first!=NULL)
    List1.insertNode(List2.first->info);
    mergeLists(&List1, &List2.first->next);
//If I try to use this it says cannot bind to a temporary of 
type

我需要访问下一个节点以将其余信息添加到列表1的帮助

看起来像一个简单的while循环

nodeType* n = List2.first;
while (n != NULL)
{
    List1.insertNode(n->info);
    n = n->next;
}

尽管我仍然担心这是否是一个可接受的解决方案。你说你需要
列表2
移动到
列表1
,而这不是这段代码所做的,这段代码
列表2
复制到
列表1
列表2
不受这段代码的影响。

让我们从基础开始,合并两个列表意味着什么?例如,您是否试图通过合并两个列表来创建第三个列表?您是否正在尝试将第二个列表合并到第一个列表中(或以其他方式)?“合并”一词通常意味着一个列表中的节点被移动(而不是复制)到另一个列表中,即不分配新节点,第二个列表被移动到第一个列表中的节点破坏。这里是这样吗?这些细节很重要,因此您确实需要准确地指定您希望
mergeLists
执行的操作。添加一些您期望的输入和输出的示例。在两次尝试中您没有解决的一个问题是合并列表应该排序。因此,这个问题的任何解决方案都需要将第一个列表上的节点与第二个列表上的节点进行比较,以便保持正确的顺序。因此,在代码的某个地方,您需要比较两个列表的
info
字段。insert函数创建新节点,然后将其按正确的顺序放置,因此无需进行比较OK,这是非常低效的,但我想这是您被告知要做的。我没有包含该函数,因为我不希望它太长。是的,不是。我最担心的是访问下一个链接。非常感谢。为什么我不能使用List2.first->next?我还有一个delete函数,如果需要的话,我可以使用它来删除列表2中的元素,就像你的警告所说的
List2.first->next什么也不做。这就像是
cout next
计算出
List2
中的第二个节点是什么,但随后对该信息不做任何处理。我会在一秒钟内尝试,但如果我做了List2=List2.first->next,那会是什么acceptable@MichaelTorres否,因为类型不正确,
List2
是类型
OrderedDoublyLinkedList
List2。first->next
是类型
nodeType*
。您将列表的节点与列表本身混淆。如果要在列表上迭代,则需要使用节点本身。这就是我的
n
变量在上面代码中的作用。