मैं पॉली में एक नोड जोड़ता हूं। यदि पहले से ही समान घातांक वाला एक नोड है, तो मैं गुणांक को मौजूदा गुणांक में जोड़ देता हूं। लेकिन जब मैं इस कोड को चलाता हूं, तो अंत में आउटपुट +0.0x^7 +0.0x^5 +0.0x^4 +0.0x^3 होता है। मैं फ़ंक्शन में शून्य गुणांक वाले शब्दों को हटाने की कोशिश कर रहा हूं। मैं यह कैसे कर सकता हूं?

struct PolyNode {
    double coef;             
    int exp;                 
    struct PolyNode* next; 
};

PolyNode* AddNode(PolyNode *head, double coef, int exp) {
    PolyNode* node = new PolyNode();
    node->coef = coef;
    node->exp = exp;
    node->next = NULL;

    PolyNode** p = &head;
    while (*p != NULL && exp <= (*p)->exp) {
        p = &(*p)->next;
    }
    node->next = *p;
    *p = node;

    PolyNode* first = head;
    PolyNode* second = NULL;

    while (first != NULL && first->next != NULL) {
        second = first;
        first = first->next;
        if (second->exp == first->exp) {
            
            second->coef = second->coef + first->coef;
            second->next = first->next;
        }
    }
    return head;
} 

void main() {

    PolyNode* poly = NULL;
    printf("Initial poly: "); Print(poly);

    poly = AddNode(poly, -2, 5);
    printf("Adding -2x^5: "); Print(poly);

    poly = AddNode(poly, 4.4, 7);
    printf("Adding 4.4x^7: "); Print(poly);

    poly = AddNode(poly, 2, 3);
    printf("Adding 2x^3: "); Print(poly);

    poly = AddNode(poly, 1, 4);
    printf("Adding x^4: "); Print(poly);

    poly = AddNode(poly, 4, 4);
    printf("Adding 4x^4: "); Print(poly);

    poly = AddNode(poly, 2, 5);
    printf("Adding 2x^5: "); Print(poly);

    poly = AddNode(poly, -4.4, 7);
    printf("Adding -4.4x^7: "); Print(poly);

    poly = AddNode(poly, -2, 3);
    printf("Adding -2x^3: "); Print(poly);

    poly = AddNode(poly, -5, 4);
    printf("Adding -5x^4: "); Print(poly);

   system("pause")
}
c++
0
Halit Turan 17 नवम्बर 2020, 18:04

1 उत्तर

सबसे बढ़िया उत्तर

यदि हम आपके द्वारा स्थापित शैली के अनुसार चल रहे हैं, तो यह काम करना चाहिए।

    PolyNode** first = &head;
    PolyNode** second = NULL;

    while (*first != NULL && (*first)->next != NULL) {
        second = first;
        first = &(*first)->next;
        if ((*second)->exp == (*first)->exp) {
            
            (*second)->coef = (*second)->coef + (*first)->coef;
            (*second)->next = (*first)->next;
            if ((*second)->coef == 0)
                (*second) = (*second)->next;
        }
    }

मैं शायद पठनीयता में सुधार के लिए फ़ंक्शन को दोबारा करने की अनुशंसा करता हूं। यहां एक मोटा उदाहरण दिया गया है जिसे निश्चित रूप से सुधारा जा सकता है।

PolyNode* AddNode(PolyNode *head, double coef, int exp) {
    PolyNode* node = new PolyNode();
    node->coef = coef;
    node->exp = exp;
    node->next = NULL;

    // If the list is empty, return node as head
    if (head == NULL)
        return node;
    // Checking the head node edge cases
    else if (head->exp == exp) {
        head->coef += coef;
        if (head->coef == 0)
            return head->next;
    }
    else if (head->exp < exp) {
        node->next = head;
        return node;
    }
    else {
        PolyNode* traverse = head;
        while (traverse != NULL) {
            // We've reached the end of the list
            if (traverse->next == NULL) {
                traverse->next = node;
                break;
            }
            // The next value is of the same exponent
            else if (traverse->next->exp == exp) {
                traverse->next->coef += coef;
                if (traverse->next->coef == 0)
                    traverse->next = traverse->next->next;
                break;
            }
            // The next node is of a lesser exponent
            else if (traverse->next->exp < exp) {
                node->next = traverse->next;
                traverse->next = node;
                break;
            }
            traverse = traverse->next;
        }
    }

    return head;
} 

ध्यान रखें कि यह उदाहरण उसके द्वारा आवंटित मेमोरी को प्रबंधित नहीं करता है।

0
David 17 नवम्बर 2020, 18:15