实施例: 链接列表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;
}
答案 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;
}
}
这是在任何索引中将一个堆栈弹出到另一个堆栈中最简单的