Error:no matching function for call to......&leetcode2

4203 ワード

leetcodeを塗って、次のように書いたときにこのように間違えました.
struct ListNode *result = new ListNode();

最初は構造体も初期化されず、こうなりました.長い間C++を使わずにたくさん忘れました.
構造体ポインタは、使用する前に初期化または付与操作によって、ある構造体変数のヘッダアドレスをその構造体変数に割り当てる必要があります.
現在のエラー内容は
error: no matching function for call to 'ListNode:ListNode()'

その後、ネットで構造体について調べても欲しいものが見つからず、本をめくってみると、ほとんどのC++の本が構造体の内容について話していないことに気づき、Cの本をめくった.
以下に、構造体定義の内容を示します.
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
    };

ローカルIDEで試してみましたが、以下のコードに簡略化されています
struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
	
};

int main()
{
	 ListNode result, *presult;
	 presult = &result;//   
    return 0;
}

このときresultが赤い線を描くエラーメッセージは‘クラスListNodeにデフォルトコンストラクタが存在しない’である.
ここではなぜListNodeをクラスと判断したのかよく分かりませんが、IDEがそもそも差が少なく真剣に判断していないと思っているのかもしれないと思います.
エラーの原因は次のとおりです.
ListNode result;
構造体の中で構造関数を定義して使うので、このresultは実は役に立たないので、このコードを次のように変更します.
struct ListNode* presult = new ListNode(0);

------------------------------------------------------------------------------------------------------------------------------------------
この问题は长い间やっていたが、これまでほとんどやったことがないので、最初から始めたつもりだ....
データ構造学がよくないのでチェーンテーブルの理解に問題があります.この問題のもっと簡単な方法は直接結果をl 1の中に置くべきです.私が使っている方法はpresultのチェーンテーブルを新しく作ったことです.それから、チェーンテーブルがどのように挿入されるか忘れたので間違いました.
 struct ListNode* insert = new ListNode(add%10);
            struct ListNode* result = presult;
            while(result->next != NULL)
            {result = result->next;}
          
            insert->next = result -> next;
            result->next = insert;

これは正しい操作です.
以前はresultというポインタでpresultの後ろに直接差し込んでいませんでした.
すべてのコードを添付して、书くのはとても复雑でとても复雑です...
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        /*Initialize current node to dummy head of the returning list*/   
        struct ListNode *presult = new ListNode(0);
       
        /*Initialize carry and the result of add*/
        int carry = 0;
        int add = 0;
        /*loop until both ends*/
        while(l1 != NULL || l2 != NULL  )
        {
        /*if l1 come to end only, make it zero*/
            if (l1 == NULL)
            {
                add = l2 -> val + carry;
            }else if(l2 == NULL)
        /*if l2 come to end only, make it zero*/
            {
                add = l1 -> val + carry;
            }else{
        /*if none of them come to an end then add them with carry*/
                 if(l1!= NULL &&l2!= NULL){
                add = l1 -> val + l2 -> val + carry;
                 }
                 }
            /*add the result to the end of the list presult*/
            struct ListNode* insert = new ListNode(add%10);
            struct ListNode* result = presult;
            while(result->next != NULL)
            {result = result->next;}
          
            insert->next = result -> next;
            result->next = insert;
             /*calculate the next carry*/
            if(add >= 10)
            {
            carry = 1;
            }else{
            carry = 0;    
            }
            /*advance l1&l2*/
            if(l1 != NULL)
            {
            l1 = l1->next;
            }
            if(l2!= NULL)
            {
            l2 = l2->next;
            }
            }
            presult = presult->next;
         
        //if the result is more
         struct ListNode* result = presult;
            while(result->next != NULL)
            {result = result->next;}
        if(carry == 1)
        {
           
            result ->next = new ListNode(0);
            result->next->val = 1;
            result -> next -> next = NULL;
        }else{
            result-> next = NULL;
        }
        return presult;
    }
};