シリーズ10は、プランを勝ち:2つのソートされたリストをマージ

1、3、および2リスト::リフトが1のリストであるとき、私はこの質問を取得する例思考の私の列車2,4,6,8がある:1、各ノード2のテーブルに基づいて、表1挿入ポイント。そのリストは、私が新たに追加された作成された2つの要素、元のリストの、すなわち最初の2つのノードが与える一回です。私は真ん中のポインタが本当にアップ取得する方法がわからない、長い時間カオスの心のためにこのアイデアを持っていました。だから私は眠りにベッドに行ってきました、ハハ、私はおそらく、世界のほとんどの人は脱出しますしています......

私は一般的に二つの理由があり、コードを書くために再帰を使うのが好きではありませんので、私は、私は再帰を使用することを考えたときに実行実際には再帰的な方法を使って答えを、読む、しかし役に立たない、人は死んで簡単に再帰ループがあり、それがあります再帰の複雑さは高すぎます。しかし、この質問は実際に使用再帰は、再帰的な単純すぎるを行うにはあまりにも適しています。そして、時間の一種で、答えは何の方法ではないだけの回数をランク付けし、その後、リストの範囲残りの2つの長さは、再帰呼び出しがかかる場合があります。即座に答え明確な思考を読んで、すぐにコードを書きました:

1つの#include <iostreamの>
 2  使用して 名前空間STD;
 3。 構造体ListNode {
 4。 INT ヴァル;
 5。 構造体 ListNode * 次に、                             
 6。 ListNode(){}
 7。 };
 8。 クラスソリューション{
 9。 公共10      ListNodeマージ*(* pHead1 ListNode、 * ListNode pHead2)
 11      {
 12は         IF)pHead1 == NULL(// この特別なデータ処理も非常に包括的である
13である             戻りpHead2を、
 14          
15             IF(pHead2 == NULL)
 16                  リターンpHead1;
 17          ListNode * P = NULL;
 18は、         IF(pHead1->ヴァル<pHead2->ヴァル)// 最初のデータの方が小さいリスト、最初置くリンクされたリストである場合最初のノードは、新しいリスト、リストとして出てくると続けるオペレータの最初のリストに残りの二つの再帰関数を追加する
19。         {
 20は              P = pHead1;
 21である              P->次にマージ=(pHead1-> 次に、 pHead2);
 22である         }
 23は、         // 逆に同様に
24          {
 25              P = pHead2;
 26は、              マージ=(pHead1、pHead2->次にP-> 次に);
 27         }
 28          リターンP。
29      }
 30  }。
31  のint main()の
 32  {
 33      ソリューションので、
34      構造体 ListNodeリスト[ 4 ]。
35      リスト[ 0 ] .val = 1 36      リスト[ 0 ] .next =&リスト[ 1 ]。
37      リスト[ 1 ] .val = 3 38      リスト[ 1 ] .next =&リスト[ 2 ]。
39      リスト[ 2 ] .val =5 ;
40      リスト[ 2 ] .next =&リスト[ 3 ]。
41      リスト[ 3 ] .val = 7 42      リスト[ 3 ] .next = NULL;
43      構造体 ListNode LIST1 [ 4 ]。
44      LIST1 [ 0 ] .val = 2 45      LIST1 [ 0 ] .next =&LIST1 [ 1 ]。
46      LIST1 [ 1 ] .val = 4 47      LIST1 [ 1 ] .next =&LIST1 [ 2 ]。
48      LIST1 [ 2 ] .val = 6 49      LIST1 [ 2 ] .next =&LIST1 [ 3 ]。
50      LIST1 [ 3 ] .val = 8 51      LIST1 [ 3 ] .next = NULL;
52      ListNode *再= so.Merge(リスト、LIST1)。
53      一方(再!= NULL)
 54      {
 55          COUT <<再>ヴァル<< ENDL。
56          =再>再次。
57      }
 58      リターン 0 59 }

今日、この質問を要約すると:

プログラミングの問題一時間はそれをしなかった場合1.トピックは答えを見るために急いで、任意の脳死彼は考え続け、限り、あなたの報酬の価値もない話題を満たしていません。安全性を証明するために提供する上で、被写体の難易度が非常に大きくはありません、問題の効率化ではなく、死んでライバル関係に問題を改善するために多くのことをしよう。

2.会う複雑な問題は、このようなタイトルとして、問題を打破することを学びます。私はどこにもなかったと思ったときに、なぜ1つのノードのうち、それを並べ替えるには?このような時に1つは、まだ標準解答することはできません。このトリックは話す分割統治アルゴリズムと呼ばれています。

3.楽観楽観楽観、私が使用することを生まれています。

4.少し感情的な今日、emmmmmm、工学部の学生が、私は生活の中心と考えます。

最後に、私は二桁の庭の友人よりも、幸せなブログでブログを作りました。

おすすめ

転載: www.cnblogs.com/neverland0718/p/10988868.html
おすすめ