leetcode刷题第二天<两数相加>
程序员文章站
2022-08-31 17:06:16
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> ... ......
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
首先是c++
最开始采用官方题解java该c++版本的,代码如下
/** * definition for singly-linked list. * struct listnode { * int val; * listnode *next; * listnode(int x) : val(x), next(null) {} * }; */ class solution { public: listnode* addtwonumbers(listnode* l1, listnode* l2) { listnode* dummyhead = new listnode(0); listnode* p = l1; listnode* q = l2; listnode* curr = dummyhead; int carry = 0; while (p != 0 || q != 0) { int x = (p != 0) ? p->val : 0; int y = (q != 0) ? q->val : 0; int sum = carry + x + y; carry = sum / 10; curr->next = new listnode(sum % 10); curr = curr->next; if (p != 0) p = p->next; if (q != 0) q = q->next; } if (carry > 0) { curr->next = new listnode(carry); } return dummyhead->next; } };
思路为申请一个新的链表空间进行存储,然后分别进行链表的传递,接着判断链表的值与0的关系返回,最后求和,然后%10取余数,最后判断余数和和0的关系,然后返回即可
另外一种大佬解法
是申请两个链表的空间,然后如果链表不为空进行遍历相加,最后在判断链表和余数与9的关系,最后返回第二个链表空间。
代码如下
class solution { public: listnode* addtwonumbers(listnode* l1, listnode* l2) { listnode* list_head= new listnode(0); listnode* list_node=list_head; while(1) { int sum=list_node->val; if(l1) { sum+=l1->val; l1=l1->next; } if(l2) { sum+=l2->val; l2=l2->next; } list_node->val=sum%10; if(l1||l2||sum>9) { list_node->next=new listnode(sum/10); list_node=list_node->next; } else{ break; } } return list_head; } };
最后再用python走下
# definition for singly-linked list. # class listnode: # def __init__(self, x): # self.val = x # self.next = none class solution: def addtwonumbers(self, l1: listnode, l2: listnode) -> listnode: add_num = 0 new_list = listnode(0) cur = new_list cur1 = l1 cur2 = l2 while cur1 or cur2: if cur1 and cur2: value = cur1.val + cur2.val + add_num elif cur1: value = cur1.val + add_num elif cur2: value = cur2.val + add_num cur.next = listnode(value % 10) add_num = 0 if value > 9: add_num = 1 cur = cur.next if cur1: cur1 = cur1.next if cur2: cur2 = cur2.next if add_num: cur.next = listnode(add_num) cur = cur.next return new_list.next
上一篇: Asp.Net MVC Https设置