2009-11-10 5 views
2

Мне предоставлен список L1, L2. L1 содержит 1,2,3, а L2 содержит 4,5,6. как скопировать содержимое из L2 в конец L1, так что в конце L1 содержит 1,2,3,4,5,6. какие-либо предложения?как скопировать одно содержимое связанного списка в другой связанный список

+1

Чтобы получить ответы на этот вопрос, нужно немного подробнее. Вы сами пишете класс связанного списка или используете существующий? Если существующий, какой? – qid

+0

Это действительно не конкретный вопрос, связанный с визуальной студией. –

+1

Это также звучит как домашнее задание ... – Salgar

ответ

1

Если это связанный список, то каждый узел в списке должен иметь указатель на следующий элемент в списке. Последний узел в списке должен указывать на нуль (или какой-либо другой способ указать, что вы в конце списка). Чтобы скопировать содержимое L2 в конец L1, просто установите указатель следующего узла LAST-элемента L1 в FIRST-элемент L2.

3

Не зная больше о фактической реализации, я бы сказал это сделать:

L1.tail = L2.head

Это позволит связать два списка вместе, теперь вы можете выбросить ссылку на L2 ,

1

Поскольку этот вопрос является домашним заданием, я не могу дать вам фактический код. Но это непростая задача.

В принципе, вы просто хотите добавить содержимое L2 в конец L1. Как вы знаете, каждый связанный список имеет указатель на голову и указатель на хвост. Когда вы добавляете в список, это означает прикрепление нового узла к указателю на хвост, а затем перемещение указателя хвоста вперед. Поэтому вам просто нужно добавить указатель на голову L2 к указателю хвоста L1 и переместить указатель хвоста L1 в конец списка.

Кроме того, не забудьте обновить размер списка, если ваш класс списка имеет внутреннюю переменную размера, чтобы подсчитать количество элементов.

0

Что произойдет с L2 после этого? Вы почти определенно не хотите просто изменять L1.tail, чтобы указать на L2.head, если L2 будет использоваться и изменен позже в программе.

Почему бы просто не зациклиться от головы до хвоста L2 и нажать значения в L1? (Если вам нужны конкретные детали реализации, вам нужно сообщить нам, какой Linked List вы используете, или отправить код на ваш, если вы его написали).

1

Вы прокомментировали, что это не домашнее задание, хотя оно помечено как домашнее задание. Я возьму ваше слово за это.

Используя список STL C++, все, что вам нужно, это метод вставки и некоторые итераторы.

list<int> L1; 
list<int> L2; 

// let's just assume that L1 and L2 are initialized in the manner you described 

// after this, L1 will contain 1,2,3,4,5,6 
L1.insert(L1.end(), L2.begin(), L2.end()); 
Смежные вопросы