您的位置:首页 > 编程语言 > Java开发

文章标题

2017-06-10 17:30 232 查看

leetcode

Add Two Numbers



级别 medium

写了简单的链表合并算法通俗易懂

对题目的理解为两个方面

1.合并节点值大于等于10时,需要对后面节点进一位,进位还可能后导致的再进位如:1+9等

2.这里采用的是用l1节点就地合并,所以有两种情况l1.length>l2.length;l2到达尽头后需要后续进一位时l1有可能连续进位,所以在初步合并后还需while自增

l1.length<=l2.length时,则只需要插入尾部(k值用来保留l1的尾部节点)

source code:

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

ListNode p,q,k;
k = null;
p = l1;
q = l2;
while(p!=null&&q!=null){
p.val += q.val;
if(p.val >= 10){
p.val %= 10;
if(p.next!=null){
p.next.val += 1;
}else{
p.next = new ListNode(1);
}
}
if(p.next == null){
k = p;
}
p = p.next;
q = q.next;

}

while(p!=null){
if(p.val >= 10){
p.val %= 10;
if(p.next!=null){
p.next.val += 1;
}else{
p.next = new ListNode(1);
}
}
p = p.next;
}

if(q!=null){
if(p==null){
p = k;
}
p.next = q;
}

return l1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode-java