版權(quán)聲明:本文為博主原創(chuàng)文章测秸,未經(jīng)博主允許不得轉(zhuǎn)載腿椎。
難度:容易
要求:
假定用一個(gè)鏈表表示兩個(gè)數(shù)优烧,其中每個(gè)節(jié)點(diǎn)僅包含一個(gè)數(shù)字佃蚜。假設(shè)這兩個(gè)數(shù)的數(shù)字順序排列庸娱,請(qǐng)?jiān)O(shè)計(jì)一種方法將兩個(gè)數(shù)相加,并將其結(jié)果表現(xiàn)為鏈表的形式谐算。
樣例
給出兩個(gè)鏈表 3->1->5->null和 5->9->2->null熟尉,返回8->0->8->null
思路:
解題容易,注意邊界處理洲脂。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
public ListNode addLists(ListNode l1, ListNode l2) {
//臨時(shí)鏈表
ListNode tmp = new ListNode(0);
ListNode head = tmp;
while(l1 != null || l2 != null){
//防止有一個(gè)ListNode為null
tmp.val = (l1 != null ? l1.val : 0) +
(l2 != null ? l2.val : 0) +
tmp.val;
//進(jìn)位 + 1
if(tmp.val >= 10){
tmp.val %= 10;
tmp.next = new ListNode(1);
}
//判斷是否有下一位,如果有就移動(dòng)到下一位
boolean flag = false;
if(l1 != null){
l1 = l1.next;
flag = true;
}
if(l2 != null){
l2 = l2.next;
flag = true;
}
//如果有下一位斤儿,新建ListNode
if(l1 !=null || l2 !=null){
if(flag && tmp.next == null){
tmp.next = new ListNode(0);
}
tmp = tmp.next;
}
}
return head;
}
}
總耗時(shí): 1670 ms