鱼C论坛

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

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

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

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

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

x
本帖最后由 a327904410 于 2022-3-14 15:43 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. struct ListNode {
  4.         int val;
  5.         struct ListNode* next;
  6. };

  7. void InitNode(struct ListNode** l) {
  8.         *l = (struct ListNode*)malloc(sizeof(struct ListNode));
  9.         if (*l == NULL) {
  10.                 printf("分配空间失败!");
  11.         }
  12.         (*l)->next = NULL;
  13. }

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

  17.         int i;
  18.         for (i = 0; i < len; i++) {
  19.                 struct ListNode* s;
  20.                 s = (struct ListNode*)malloc(sizeof(struct ListNode));
  21.                 s->val = sz[i];
  22.                 s->next = p->next;
  23.                 p->next = s;
  24.         }
  25.         return 1;
  26. }

  27. struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
  28.         int tmp = 0;
  29.         struct ListNode* p1 = l1->next, * p2 = l2->next;
  30.         struct ListNode* sum;
  31.         InitNode(&sum);
  32.         while (p1 != NULL || p2 != NULL) {
  33.                 if (l1 == NULL) {
  34.                         return l2;
  35.                 }
  36.                 if (l2 == NULL) {
  37.                         return l1;
  38.                 }
  39.                 struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
  40.                 int num1, num2, he;
  41.                 if (p1 != NULL) {
  42.                         num1 = p1->val;
  43.                         p1 = p1->next;
  44.                 }
  45.                 if (p2 != NULL) {
  46.                         num2 = p2->val;
  47.                         p2 = p2->next;
  48.                 }
  49.                 he = num1 + num2 + tmp;
  50.                 tmp = he / 10;
  51.                 he = he % 10;
  52.                 s->val = he;
  53.                 s->next = sum->next;
  54.                 sum->next = s;
  55.         }
  56.         if (tmp != 0) {
  57.                 struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
  58.                 s->val = tmp;
  59.                 s->next = sum->next;
  60.                 sum->next = s;
  61.         }
  62.         return sum;
  63. }

  64. void DispNode(struct ListNode* l) {
  65.         struct ListNode* p = l->next;
  66.         while (p != NULL) {
  67.                 printf("%d ", p->val);
  68.                 p = p->next;
  69.         }
  70. }

  71. int main() {
  72.         struct ListNode* l1, * l2;
  73.         InitNode(&l1);
  74.         InitNode(&l2);
  75.         int sz1[] = { 1,2,3 };
  76.         int sz2[] = { 4,5,6 };
  77.         int len1 = sizeof(sz1) / sizeof(int);
  78.         int len2 = sizeof(sz2) / sizeof(int);
  79.         InsNode(l1, sz1, len1);
  80.         InsNode(l2, sz2, len2);
  81.         struct ListNode* sum = addTwoNumber(l1, l2);     // 在这里调用这个函数,我这个方法好像是错的
  82.         DispNode(sum);
  83.         return 0;
  84. }
复制代码
最佳答案
2022-3-14 15:57:12
不知道是不是你要的:
  1. #include <stdio.h>
  2. #include <malloc.h>

  3. typedef struct ListNode{
  4.         int val;
  5.         struct ListNode *next;
  6. }ListNode;

  7. ListNode *sum(ListNode *a, ListNode *b){
  8.         if(a && b) {
  9.                 ListNode *res = (ListNode*)malloc(sizeof(ListNode));
  10.                 res->val = a->val + b->val;
  11.                 res->next = NULL;
  12.                 return res;
  13.         }
  14.         return NULL;
  15. }

  16. ListNode *FREE_ALL(ListNode *head){
  17.         if(head){
  18.                 while(head){
  19.                         ListNode *p = head;
  20.                         head = head->next;
  21.                         free(p);
  22.                 }
  23.                 return head;
  24.         }
  25.         return NULL;
  26. }

  27. int main(){
  28.         ListNode *A, *B, *C;
  29.         A = (ListNode*)malloc(sizeof(ListNode));
  30.         B = (ListNode*)malloc(sizeof(ListNode));
  31.        
  32.         A->val = 13;
  33.         A->next = NULL;
  34.        
  35.         B->val = 4;
  36.         A->next = NULL;
  37.        
  38.         C = sum(A, B);
  39.         printf("C->val: %d", C->val);
  40.        
  41.         // ----- 释放内存 -----
  42.         A = FREE_ALL(A);
  43.         B = FREE_ALL(B);
  44.         C = FREE_ALL(C);
  45.        
  46.         free(A);
  47.         free(B);
  48.         free(C);
  49.        
  50.         return 0;
  51. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层    本楼为最佳答案   
不知道是不是你要的:
  1. #include <stdio.h>
  2. #include <malloc.h>

  3. typedef struct ListNode{
  4.         int val;
  5.         struct ListNode *next;
  6. }ListNode;

  7. ListNode *sum(ListNode *a, ListNode *b){
  8.         if(a && b) {
  9.                 ListNode *res = (ListNode*)malloc(sizeof(ListNode));
  10.                 res->val = a->val + b->val;
  11.                 res->next = NULL;
  12.                 return res;
  13.         }
  14.         return NULL;
  15. }

  16. ListNode *FREE_ALL(ListNode *head){
  17.         if(head){
  18.                 while(head){
  19.                         ListNode *p = head;
  20.                         head = head->next;
  21.                         free(p);
  22.                 }
  23.                 return head;
  24.         }
  25.         return NULL;
  26. }

  27. int main(){
  28.         ListNode *A, *B, *C;
  29.         A = (ListNode*)malloc(sizeof(ListNode));
  30.         B = (ListNode*)malloc(sizeof(ListNode));
  31.        
  32.         A->val = 13;
  33.         A->next = NULL;
  34.        
  35.         B->val = 4;
  36.         A->next = NULL;
  37.        
  38.         C = sum(A, B);
  39.         printf("C->val: %d", C->val);
  40.        
  41.         // ----- 释放内存 -----
  42.         A = FREE_ALL(A);
  43.         B = FREE_ALL(B);
  44.         C = FREE_ALL(C);
  45.        
  46.         free(A);
  47.         free(B);
  48.         free(C);
  49.        
  50.         return 0;
  51. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-14 16:02:11 | 显示全部楼层
  1. int num1, num2, he;///////没有赋初值,如果两个链表长度不一样,num1或num2会是任意值
  2.                 if (p1 != NULL) {
  3.                         num1 = p1->val;
  4.                         p1 = p1->next;
  5.                 }
  6.                 if (p2 != NULL) {
  7.                         num2 = p2->val;
  8.                         p2 = p2->next;
  9.                 }
  10.                 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-5-20 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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