当前位置: 首页 > news >正文

两数相加leetcode

第一个是测试用例代码,测试的是两个带头的逆序链表相加,并且有反转操作

但是题目要求的是不带头链表直接相加,不需要逆转,输出结果也是逆序的,

题解放在第二个代码中

#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode {int val;struct ListNode* next;
}List;List* reverse(List* L) {List* p = L;List* q = NULL;while (p != NULL) {List* temp = p->next;p->next = q;q = p;p = temp;}List* head = (List*)(malloc)(sizeof(List));head->next = q;List* temp = head;while (temp->next->next != NULL) {temp = temp->next;}temp->next = NULL;return head;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {List*L1=reverse(l1);L1->val = 0;List*L2=reverse(l2);L2->val = 0;List* L3 = (List*)(malloc)(sizeof(List));L3->next = NULL;L3->val = 0;int flag = 0;while (L1 != NULL || L2 != NULL) {List* temp = (List*)(malloc)(sizeof(List));temp->next = NULL;temp->val = 0;if (L1) {temp->val += L1->val;L1 = L1->next;}if (L2) {temp->val += L2->val;L2 = L2->next;}if (flag == 1) {temp->val += 1;flag = 0;}//进位if (temp->val >= 10) {temp->val= temp->val % 10;flag = 1;}//大于10进位List* cur = L3;while (cur->next != NULL) {cur = cur->next;}cur->next = temp;if (L1 == NULL && L2 == NULL && flag == 1) {List* digital = (List*)(malloc)(sizeof(List));digital->val = 1;digital->next = NULL;temp->next = digital;}}L3->next->val = 0;return reverse(L3->next);
}
List* makeList() {List* L = (List*)(malloc)(sizeof(List));L->next = NULL;int num;while (1) {scanf("%d", &num);if (num == 0) {break;}List* temp = (List*)(malloc)(sizeof(List));temp->next = NULL;temp->val = num;List* p = L;while (p->next != NULL) {p = p->next;}p->next = temp;}return L;
}
void print_List(List* L) {L = L->next; // 跳过头节点while (L != NULL) {printf("%d ", L->val);L = L->next;}printf("\n");
}int main() {List* L1 = makeList();printf("打印L1\n");print_List(L1);List* L3=reverse(L1);List* L2= makeList();printf("打印L2\n");print_List(L2);List* L4 = reverse(L2);printf("打印L3\n");print_List(L3);printf("打印L4\n");print_List(L4);List* L5 = addTwoNumbers(L3, L4);printf("打印L5\n");print_List(L5);
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {struct ListNode* L3 = (struct ListNode*)(malloc)(sizeof(struct ListNode));L3->next = NULL;L3->val=0;int flag = 0;while (l1 != NULL || l2 != NULL) {struct ListNode* temp = (struct ListNode*)(malloc)(sizeof(struct ListNode));temp->next = NULL;temp->val = 0;if (l1) {temp->val += l1->val;l1 = l1->next;}if (l2) {temp->val += l2->val;l2 = l2->next;}if (flag == 1) {temp->val += 1;flag = 0;}//进位if (temp->val >= 10) {temp->val= temp->val % 10;flag = 1;}//大于10进位struct ListNode* cur = L3;while (cur->next != NULL) {cur = cur->next;}cur->next = temp;if (l1 == NULL && l2 == NULL && flag == 1) {struct ListNode* digital = (struct ListNode*)(malloc)(sizeof(struct ListNode));digital->val = 1;digital->next = NULL;temp->next = digital;}}return (L3->next);
}

http://www.lryc.cn/news/451597.html

相关文章:

  • C0004.Qt中QComboBox设置下拉列表样式后,下拉列表样式无效的解决办法
  • AI 对话工具汇总
  • 面试题05.08绘制直线问题详解(考察点为位运算符)
  • 埃及 Explained
  • 【Linux】第一个小程序——进度条实现
  • 如何确定光纤用几芯 用光纤与网线区别在哪里
  • 使用Chrome浏览器时打开网页如何禁用缓存
  • zabbix7.0创建自定义模板的案例详解(以监控httpd服务为例)
  • 从零开始Ubuntu24.04上Docker构建自动化部署(五)Docker安装jenkins
  • 【JS】访问器成员
  • 五子棋双人对战项目(3)——匹配模块
  • 开源软件简介
  • Bruno:拥有 11.2k star 的免费开源 API 测试工具
  • C动态内存管理
  • 系列二、案例实操
  • Python编码系列—Python状态模式:轻松管理对象状态的变化
  • 卸载WSL(Ubuntu),卸载linux
  • Lumerical脚本语言-系统(System)
  • QT 界面编程中使用协程
  • macOS 开发环境配置与应用开发
  • 第13讲 实践:设计SLAM系统
  • NeRF2: Neural Radio-Frequency Radiance Fields 笔记
  • 以太网交换安全:MAC地址表安全
  • CSS综合页布面局案例
  • 低代码可视化-UniApp二维码可视化-代码生成器
  • Electron 使用 Nodemon 配置自动重启
  • JVM和GC监控技术
  • Android中级控件
  • WebSocket消息防丢ACK和心跳机制对信息安全性的作用及实现方法
  • 生信初学者教程(二十二):Boruta+RF筛选候选标记物