a327904410 发表于 2022-3-14 15:01:35

这种类型函数怎么在主函数里调用

本帖最后由 a327904410 于 2022-3-14 15:43 编辑

#include<stdio.h>
#include<stdlib.h>

struct ListNode {
        int val;
        struct ListNode* next;
};

void InitNode(struct ListNode** l) {
        *l = (struct ListNode*)malloc(sizeof(struct ListNode));
        if (*l == NULL) {
                printf("分配空间失败!");
        }
        (*l)->next = NULL;
}

// 把数组里数据插进链表
int InsNode(struct ListNode* l, int *sz, int len) {
        struct ListNode* p = l;

        int i;
        for (i = 0; i < len; i++) {
                struct ListNode* s;
                s = (struct ListNode*)malloc(sizeof(struct ListNode));
                s->val = sz;
                s->next = p->next;
                p->next = s;
        }
        return 1;
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
        int tmp = 0;
        struct ListNode* p1 = l1->next, * p2 = l2->next;
        struct ListNode* sum;
        InitNode(&sum);
        while (p1 != NULL || p2 != NULL) {
                if (l1 == NULL) {
                        return l2;
                }
                if (l2 == NULL) {
                        return l1;
                }
                struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
                int num1, num2, he;
                if (p1 != NULL) {
                        num1 = p1->val;
                        p1 = p1->next;
                }
                if (p2 != NULL) {
                        num2 = p2->val;
                        p2 = p2->next;
                }
                he = num1 + num2 + tmp;
                tmp = he / 10;
                he = he % 10;
                s->val = he;
                s->next = sum->next;
                sum->next = s;
        }
        if (tmp != 0) {
                struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
                s->val = tmp;
                s->next = sum->next;
                sum->next = s;
        }
        return sum;
}

void DispNode(struct ListNode* l) {
        struct ListNode* p = l->next;
        while (p != NULL) {
                printf("%d ", p->val);
                p = p->next;
        }
}

int main() {
        struct ListNode* l1, * l2;
        InitNode(&l1);
        InitNode(&l2);
        int sz1[] = { 1,2,3 };
        int sz2[] = { 4,5,6 };
        int len1 = sizeof(sz1) / sizeof(int);
        int len2 = sizeof(sz2) / sizeof(int);
        InsNode(l1, sz1, len1);
        InsNode(l2, sz2, len2);
        struct ListNode* sum = addTwoNumber(l1, l2);   // 在这里调用这个函数,我这个方法好像是错的
        DispNode(sum);
        return 0;
}

傻眼貓咪 发表于 2022-3-14 15:20:09

请问你是不是想将两个值相加得出结果?
为什么输入的是单链表头指针呢?(意义不明)

a327904410 发表于 2022-3-14 15:30:47

傻眼貓咪 发表于 2022-3-14 15:20
请问你是不是想将两个值相加得出结果?
为什么输入的是单链表头指针呢?(意义不明)

单链表初始化和数据插入的代码省略了,我只是想知道这个函数怎么在主函数里调用

a327904410 发表于 2022-3-14 15:43:59

傻眼貓咪 发表于 2022-3-14 15:20
请问你是不是想将两个值相加得出结果?
为什么输入的是单链表头指针呢?(意义不明)

完整代码发上来了,不知道对错,毕竟还没能输出

傻眼貓咪 发表于 2022-3-14 15:57:12

不知道是不是你要的:#include <stdio.h>
#include <malloc.h>

typedef struct ListNode{
        int val;
        struct ListNode *next;
}ListNode;

ListNode *sum(ListNode *a, ListNode *b){
        if(a && b) {
                ListNode *res = (ListNode*)malloc(sizeof(ListNode));
                res->val = a->val + b->val;
                res->next = NULL;
                return res;
        }
        return NULL;
}

ListNode *FREE_ALL(ListNode *head){
        if(head){
                while(head){
                        ListNode *p = head;
                        head = head->next;
                        free(p);
                }
                return head;
        }
        return NULL;
}

int main(){
        ListNode *A, *B, *C;
        A = (ListNode*)malloc(sizeof(ListNode));
        B = (ListNode*)malloc(sizeof(ListNode));
       
        A->val = 13;
        A->next = NULL;
       
        B->val = 4;
        A->next = NULL;
       
        C = sum(A, B);
        printf("C->val: %d", C->val);
       
        // ----- 释放内存 -----
        A = FREE_ALL(A);
        B = FREE_ALL(B);
        C = FREE_ALL(C);
       
        free(A);
        free(B);
        free(C);
       
        return 0;
}

jhq999 发表于 2022-3-14 16:02:11

int num1, num2, he;///////没有赋初值,如果两个链表长度不一样,num1或num2会是任意值
                if (p1 != NULL) {
                        num1 = p1->val;
                        p1 = p1->next;
                }
                if (p2 != NULL) {
                        num2 = p2->val;
                        p2 = p2->next;
                }
                he = num1 + num2 + tmp;

a327904410 发表于 2022-3-14 16:56:12

傻眼貓咪 发表于 2022-3-14 15:57
不知道是不是你要的:

麻了,才发现我调用函数的名字给打错了,漏了个s,怪不得老是标红。我的代码可以运行的。结果也对了。还是谢谢你了{:10_266:}

a327904410 发表于 2022-3-14 16:57:04

jhq999 发表于 2022-3-14 16:02


这样的吗?那我以后都赋上初始值以防万一吧,谢了{:10_256:}
页: [1]
查看完整版本: 这种类型函数怎么在主函数里调用