鱼C论坛

 找回密码
 立即注册
查看: 672|回复: 7

[已解决]这种类型函数怎么在主函数里调用

[复制链接]
发表于 2022-3-14 15:01:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i];
                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: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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-14 15:20:09 From FishC Mobile | 显示全部楼层
请问你是不是想将两个值相加得出结果?
为什么输入的是单链表头指针呢?(意义不明)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

单链表初始化和数据插入的代码省略了,我只是想知道这个函数怎么在主函数里调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

完整代码发上来了,不知道对错,毕竟还没能输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-14 15:57:12 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
不知道是不是你要的:
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-14 16:56:12 | 显示全部楼层
傻眼貓咪 发表于 2022-3-14 15:57
不知道是不是你要的:

麻了,才发现我调用函数的名字给打错了,漏了个s,怪不得老是标红。我的代码可以运行的。结果也对了。还是谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-14 16:57:04 | 显示全部楼层

这样的吗?那我以后都赋上初始值以防万一吧,谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表