Leetcode #2.Add Two Number – Community DEV

Summarize this content to 400 words in Persian Lang
مشکلدو لیست پیوندی غیرخالی به شما داده می شود که نشان دهنده دو عدد صحیح غیر منفی است. ارقام به ترتیب معکوس ذخیره می شوند و هر گره آنها دارای یک رقم واحد است. دو عدد را اضافه کنید و مجموع را به عنوان یک لیست پیوندی برگردانید.
ممکن است فرض کنید که این دو عدد به جز خود عدد 0 هیچ صفر ابتدایی ندارند.
مثال 1:
ورودی: l1 = [2,4,3]، l2 = [5,6,4]خروجی: [7,0,8]توضیح: 342 + 465 = 807.مثال 2:
ورودی: l1 = [0]، l2 = [0]خروجی: [0]مثال 3:
ورودی: l1 = [9,9,9,9,9,9,9]، l2 = [9,9,9,9]خروجی: [8,9,9,9,0,0,0,1]
محدودیت ها:
تعداد گره ها در هر لیست پیوند شده در محدوده است [1, 100].0
مشکل
دو لیست پیوندی غیرخالی به شما داده می شود که نشان دهنده دو عدد صحیح غیر منفی است. ارقام به ترتیب معکوس ذخیره می شوند و هر گره آنها دارای یک رقم واحد است. دو عدد را اضافه کنید و مجموع را به عنوان یک لیست پیوندی برگردانید.
ممکن است فرض کنید که این دو عدد به جز خود عدد 0 هیچ صفر ابتدایی ندارند.
مثال 1:
ورودی: l1 = [2,4,3]، l2 = [5,6,4]خروجی: [7,0,8]توضیح: 342 + 465 = 807.
مثال 2:
ورودی: l1 = [0]، l2 = [0]خروجی: [0]مثال 3:
ورودی: l1 = [9,9,9,9,9,9,9]، l2 = [9,9,9,9]خروجی: [8,9,9,9,0,0,0,1]
محدودیت ها:
تعداد گره ها در هر لیست پیوند شده در محدوده است [1, 100].
0 <= Node.val <= 9
تضمین می شود که لیست نشان دهنده عددی است که صفرهای ابتدایی ندارد.
راه حل الگوریتمی
به عنوان پیش نیاز برای حل این مشکل، شما 4 نشانگر ListNode ایجاد و نگهداری می کنید: هر کدام یک اشاره گر برای هر لیست پیوندی (l1 فعلی، l2 فعلی)یکی دیگر برای نتیجه ListNode(نتیجه) و یکی برای پیگیری نتیجه فعلی (نتیجه فعلی).l1 فعلی به مقدار دهی اولیه می شود l1، l2 جریان به l2،نتیجه و نتیجه فعلی باطل شدن شما همچنین یک متغیر برای پیگیری یک رقم انتقال به نام نگه دارید حمل و نقل که در ابتدا 0 است و اگر مجموع 2 مقدار گره بزرگتر از 10 و 0 باشد در غیر این صورت 1 خواهد بود.
سپس از یک حلقه while استفاده می کنیم، که در حالی که هر دو اشاره گر به ListNodes خالی نیستند، اجرا می شود. این از تمام گره ها عبور می کند. در هر پیمایش، مقادیر هر دو ListNode فعلی را دریافت می کنیم، آنها و the را اضافه می کنیم حمل و نقل. اگر مقدار حاصل بزرگتر یا مساوی 10 باشد، مقدار را تنظیم می کنیم حمل و نقل به 1 در غیر این صورت آن را روی 0 قرار می دهیم. گره حاصل را به آن اضافه می کنیم نتیجه ListNode و حرکت دهید نتیجه فعلی گره این زمانی که به یک مقدار صفر برای هر کدام رسیدیم l1 فعلی یا l2 جریانحلقه while را جداگانه برای هر دو تکرار می کنیم l1 و l2 تا هر دو l1 فعلی و l2 جریان null هستند و مقادیر لیست را به حمل و نقل ، اضافه کردن گره های جدید به نتیجه و به روز رسانی نتیجه فعلی. اگر در پایان این، اگر ارزش carryover _is 1 است، یک گره با مقدار 1 به نتیجه _ اضافه می کنیم. در زیر کد است. با خیال راحت لایک کنید، به اشتراک بگذارید و نظر بدهید.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode l1Current=l1;
ListNode l2Current=l2;
ListNode result= null;ListNode resultCurrent=null;
int carryover=0;
while(l1Current!=null && l2Current!=null){
int l1Value=l1Current.val;
int l2Value=l2Current.val;
int resultVal=l1Value+l2Value+carryover;
if(resultVal>=10){
resultVal=resultVal-10;
carryover=1;
}else carryover=0;
if(result==null){
result=new ListNode(resultVal);
resultCurrent=result;
}else{
ListNode tmp=new ListNode(resultVal);
resultCurrent.next=tmp;
resultCurrent=resultCurrent.next;
}
l1Current=l1Current.next;
l2Current=l2Current.next;
}
while(l1Current!=null){
int resultVal=carryover+l1Current.val;
if(resultVal>=10){
carryover=1;
resultVal-=10;
}else carryover=0;
ListNode tmp=new ListNode(resultVal);
resultCurrent.next=tmp;
resultCurrent=resultCurrent.next;
l1Current=l1Current.next;
}
while(l2Current!=null){
int resultVal=carryover+l2Current.val;
if(resultVal>=10){
carryover=1;
resultVal-=10;
}else carryover=0;
ListNode tmp=new ListNode(resultVal);
resultCurrent.next=tmp;
resultCurrent=resultCurrent.next;
l2Current=l2Current.next;
}
if(carryover==1){
ListNode tmp=new ListNode(1);
resultCurrent.next=tmp;
}
return result;
}
}