leetcode2 两数相加
生活随笔
收集整理的這篇文章主要介紹了
leetcode2 两数相加
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:
給出兩個(gè) 非空 的鏈表用來表示兩個(gè)非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
如果,我們將這兩個(gè)數(shù)相加起來,則會(huì)返回一個(gè)新的鏈表來表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
解法1:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *p,*q;int len1 = 1; //l1的長度int len2 = 1; //l2的長度int flag = 0;int res = 0;p=l1;q=l2;while(p->next!=NULL){len1++ ;p=p->next;}while(q->next!=NULL){len2++;q=q->next;}if(len1>len2){for(int m = 0 ; m<len1-len2;m++){q->next=new ListNode(0);q=q->next;}}else if(len1<len2){for(int n = 0 ; n<len2-len1;n++){p->next=new ListNode(0);p=p->next;}}p=l1;q=l2;ListNode *l3 = new ListNode(-1);ListNode *w = l3;while(p!=NULL&&q!=NULL){res = flag+p->val + q->val;w->next = new ListNode(res%10);flag = res>=10?1:0;w=w->next;p=p->next;q=q->next;}if(flag){w->next = new ListNode(1);w=w->next;}return l3->next;} };我自己沒想到的這道題的兩個(gè)關(guān)鍵:
一些值得注意的code piece
while(p!=NULL&&q!=NULL){res = flag+p->val + q->val; flag = res>=10?1:0; //flag值可以由循環(huán)后面的值來決定 可以看到這里的flag直接影響的是下一次循環(huán)的下一個(gè)res值//比較常見的trick是先給flag賦值為0,后續(xù)會(huì)改變flag因而改變結(jié)果w=w->next;p=p->next;q=q->next;}總結(jié)
以上是生活随笔為你收集整理的leetcode2 两数相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类和对象—友元—全局函数做友元
- 下一篇: LTE 测量过程