0

sort()昨夜、C++ で二重リンク リストを作成する方法について質問しました。なんとか機能させましたが、今は2つのリストをマージしたいのですが、機能させることができません。私は多くのコードを持っていません、ごめんなさい。私が試したことはすべて絶対に意味がありませんでした。私が提供しようとしている情報を使用して、どこから始めればよいか、またはこれを行う方法について、誰かがヒントをくれるといいのですが。

これは私が最初に持っていたものです:

void next() { if (curr != tail) curr = curr->next; }

これらだけが必要だと思います。

オンラインでいくつかの例を見ましたが、意味がわかりません。今持っているものとはかなり違うようです。どうやら、ソート機能を実行するよりもはるかに簡単なはずです。これは、ほとんど問題がありませんでした。

説明/ヒントをいただければ幸いです。また、コードが不足していて申し訳ありません。どこから始めればよいかわかりません。

4

3 に答える 3

2

実際には複数の方法でこれを行うことができます

  1. 並べ替えられた 2 つのリストを文字通りマージして、並べ替えられたリストを作成します。
  2. 2 つの並べ替えられたリストを取得し、両方のリストの要素を並べ替えた順序で含む 3 番目の新しいリストを作成します。
  3. 2 つの並べ替え済み/並べ替えなしのリストをマージし、結果のリストを並べ替えます

いいえをしようとしているようです。3 ここに。

その場合、あなたはただ

  1. 現在のリストの先頭から開始し、最後の要素に到達するまで次へ進みます
  2. curr->next = other_list.head を設定します
  3. 現在のリストで並べ替えを呼び出す

ただし、これは元のリストを破壊します。それらを 3 番目のリストにコピーする方がよいと思います。

于 2012-10-25T16:52:08.437 に答える
1
for_each(auto x in list2name)
{
list1name.push_back(x);
}

または使用している場合C++ 11

for(auto x : list2name)
{
list1name.push_back(x);
}
于 2012-10-25T17:04:23.357 に答える
0

std::list をリンク リストとして使用した場合は、常に既存の merge() 関数http://www.cplusplus.com/reference/stl/list/を使用できます。

これが自分で実装したものである場合は、リストの 1 つの末尾を取得して、次のようなものを使用します。

   tail = list_1.get_tail();
   tail.set_next(list_2.get_head())

基本的に、リスト 1 の最後のエントリを取得し、次の要素をリスト 2 の最初の要素に設定します。

私はまだあなたが何を求めているのか少し混乱していますが、これは私が考えることができる最も基本的な方法です. それからまた、私は完全にオフになるかもしれません。幸運を

于 2012-10-25T16:52:47.390 に答える