数据结构9:链表表示的整数求和

it2024-03-30  47

题目描述

给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。

解析

乍一看挺简单,但是这个题目还有一些需要注意的地方,就导致了不断修改。 可以看出,其实这道题的重点在于整数相加,规则就是整数相加的规则,有进位且空位相当于补0.那就要顾及到不对称时候的判断。

代码

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ int sum=0, carry = 0; struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* p = head; while(l1 || l2 || carry) {//三个量的或,构成最优判断方式,carry代表进1位 sum = 0; if(l1) {//筛选出l1或l2不存在的情况 sum += l1->val; l1 = l1->next; } if(l2) { sum += l2->val; l2 = l2->next; } sum += carry; //创建新节点然后插入 struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->val = sum >=10 ? sum%10 : sum; newNode->next = NULL; carry = sum >=10 ? 1 : 0; p->next = newNode; p = p->next; } return head->next; }
最新回复(0)