C ++ - 将链接列表(A)插入位置n的另一个链接列表(B)

时间:2016-04-06 13:30:01

标签: c++ linked-list

实施例: 链接列表A:1-> 2-> 3 链接列表B:4-> 5-> 6

我的任务是创建一个函数,它将列表B传递到任何给定位置(n)的列表A. 例如:在“2”= 1-> 4-> 5-> 6-> 2-> 3(输出)之后。

我不太确定,怎么做,所以我用过:

//在列表中查找数字并获取该节点的地址的函数。

Node* List::find(int i)
{
for (start();!end();next())
        if(current->num==i) return current;
return NULL;
};

//功能,将所需数字放在列表中的位置n;

示例cin>>一世; // i = 6 ;

1-> 2-> 6 - >所需数量 - > ...

Node* List::addAfter(int pos, int num)
{
 Node* p = NULL; i


 current = find(pos);


    if (current != NULL)
    {
        p = new Node(num);
        p->next = current->next;
        current->next = p;
    }

    if (last == current) last = p;

    current = p;

 return p;
}

这两件事都有效,但仅限于:

 cout << "After which number?" << endl;
 cin >> i;  // **2**


l.addAfter(i, 1); // Before: 2->3->4    After: 2->1->3->4
l.print();

这完美无缺!但如果我有两个列表 - l1(2-> 3-> 4和l2 6-> 7) 如何使用此功能将两者放在一起?

Node * List :: addAfter(int pos,我必须在这里通过L2值) 如何将此函数l2值作为参数? 这可能有更好的方法吗?我很感激任何帮助。

整个代码:

#include <iostream>
using namespace std;
class Node
{
   public:
    int num;
    Node *next;
    Node (int n) { num = n; next = NULL; };
};

class List
{
protected:
    Node *first, *last;
public:
    Node *current;
public:
    List () { first = last = current = NULL; };
    void add_element (int n); 
    void delete_element ();  
    void print(); // Izdrukā sarakstu

    bool is_empty () { return (first == NULL); };
    void start () { current = first; };
    bool end () { return (current == NULL); };
    void next(){if (!end())current = current -> next;};

    Node* find(int i);  
    Node* addAfter(int i, List * l2); 
    ~List();  



};








int main()
{
 List l, l2;
 int k, i;
 cout << "Type number: (0,to stop):\n";
 cin >> k;
 while (k!=0)
 {
 l.add_element (k);
 cout << "Type number: (0, to stop):\n";  
 cin >> k;
 };
 cout << endl;

 cout << "Type 2nd list numbers: (0,to stop):\n";
 cin >> k;
 while (k!=0)
 {
 l2.add_element (k);
 cout << "Type 2nd list numbers: (0,to stop):\n";   
 cin >> k;
 };
 cout << endl;


 l.print();
 l2.print();

 cout << "After which element do you want to insert second list?" << endl;
 cin >> i;


l.addAfter(i, l2); // GETTING ERROR HERE.
l.print();




return 0;
}

1 个答案:

答案 0 :(得分:0)

最简单,最简单的形式是将两个堆栈都倒入一个数组

const int size = stackA.size() + stackB.size();
const stackASize = stackA.size();
const stackBSize = stackB.size();
int arrayOfStackA [size];

int arrayOfStackB [stackBSize];


//Pop StackA into ArrayA

for(int i=stackASize-1; i>0; i++)

{
    arrayOfStackA[i] = stackA.pop();

}


//Pop StackB into ArrayB

for(int i=stackBSize-1; i>=0; i++)
{
     arrayOfStackB[i] = stackB.pop();
}

现在找到要在数组A中插入数据的索引。 在你的情况下,你想在1之后输入堆栈b,如果数组是索引:1

int count = 0
for(int i=0;i<size;i++){
    if(i<requiredIndexNumber){
            //do nothing
    }
    else if(i>=requiredIndexNumber && count!=stackBSize){
            int temp = arrayOfStackA[i];
            arrayOfStackA[i] = arrayOfStackB[count++];
            arrayOfStackA[stackASize+i] = temp;
    }
}

这是在任何索引中将一个堆栈弹出到另一个堆栈中最简单的