期待されているような、連結したリストが出力されません。
input l1[1,2,4] l2[1,3,4] output "Time Limit Exceeded expected [1,1,2,3,4,4]
###定義
C++
1/** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 7 * ListNode() : val(0), next(nullptr) {} 8 * ListNode(int x) : val(x), next(nullptr) {} 9 * ListNode(int x, ListNode *next) : val(x), next(next) {} 10 * }; 11 */
###私の問題を含んだ回答
C++
1 2 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 3 //2つの並べ替えられたリンクリストを、新しい並べ替えられたリストとして返します。 4 ListNode *nodePtr=new ListNode; 5 while(l2!=NULL || l1!=NULL) 6 { 7 if(l1==NULL){ 8 nodePtr=l2; 9 l2=l2->next; 10 }else if(l2==NULL){ 11 nodePtr=l1; 12 l1=l1->next; 13 }else{ 14 //リスト1の要素よりもリスト2の要素が小さい場合は、リスト2の要素を先にリスト3に代入 15 if(l1->val <= l2->val){ 16 //l1の値の方が小さいので、nodePtrはl1に連結させる 17 nodePtr=l1; 18 //リスト1を次の要素に進める 19 l1=l1->next; 20 }else{ 21 nodePtr=l1; 22 l2=l2->next; 23 } 24 } 25 nodePtr->next=nodePtr; 26 } 27 return nodePtr; 28 }
###下記の模範解答も参考したのですが、私のコードとの違いがわかりません。
模範回答
C++
1 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 2 3 ListNode *nodePtr; 4 if(l1==NULL){ 5 return l2; 6 } else if(l2==NULL){ 7 return l1; 8 } 9 10 if(l1->val<=l2->val){ 11 nodePtr=l1; 12 nodePtr->next=mergeTwoLists(l1->next,l2); 13 } else{ 14 nodePtr=l2; 15 nodePtr->next=mergeTwoLists(l1,l2->next); 16 } 17 18 return nodePtr; 19 } 20};
質問が不明なので感想を書きますが、
ループの序盤でl1とl2の片方だけがNULLだったら、
num1やnum2の値はどうするんだろうと気になりました。
感想をいただいた点を修正しました。もし引き続きアドバイスをいただけたらよろしくお願いします。
このリンクリストは循環されていないのが保証されているのでしょうか?
すみません。循環するということがどのようなことかわかりませんでした。
模範回答の中で、循環していないことを証明するようなコードはないように思ったのですが、どうでしょうか
LeetCodeというプログラミング問題サイトで実行してるのですが、その開発環境によるエラーなのでしょうか?
リストの循環とは、ここでいうnextにリストの先頭アドレスが入るノードがあると終端がなくなりずっとぐるぐる回る状態を指します。まあ「ソートされている」と書かれているから循環していないと考えられます。
ありがとうございます。
この問題に使われている2つのリストは、
l1 [1,2,4]
l2 [1,3,4] なので、循環はしていませんでした。
回答2件
あなたの回答
tips
プレビュー