您的位置:首页 > 其它

链表求和

2016-07-10 20:43 204 查看

题目

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

样例

给出两个链表 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) {
// write your code here
ListNode p1 = l1;
ListNode p2 = l2;
if(p1 == null)
return p2;
if(p2 == null)
return p1;
ListNode head = new ListNode(0);
ListNode p3 = head;
int flag = 0;
while(p1!=null && p2!=null){
int sum = flag + p1.val + p2.val;
flag = sum/10;
sum = sum%10;
ListNode s = new ListNode(sum);
p3.next = s;
p3 = p3.next;
p1 = p1.next;
p2 = p2.next;
}
p1 = p1==null?p2:p1;
while(p1!=null ){
int sum = flag + p1.val;
flag = sum/10;
sum = sum%10;
ListNode s= new ListNode(sum);
p3.next = s;
p3 = p3.next;
p1 = p1.next;
}
if(flag == 1){
ListNode s= new ListNode(1);
p3.next = s;
p3 = p3.next;
}
return head.next;
}

}


通过修改其中一个结点的值方法

/**
* 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) {
// write your code here
ListNode p1 = l1;
ListNode p2 = l2;
if(p1 == null)
return p2;
if(p2 == null)
return p1;
ListNode head = new ListNode(0);
ListNode p3 = head;
int flag = 0;
while(p1!=null && p2!=null){
int sum = flag + p1.val + p2.val;
flag = sum/10;
sum = sum%10;
p1.val = sum;
p3.next = p1;
p3 = p3.next;
p1 = p1.next;
p2 = p2.next;
}
p1 = p1==null?p2:p1;
while(p1!=null ){
int sum = flag + p1.val;
flag = sum/10;
sum = sum%10;
p1.val = sum;
p3.next = p1;
p3 = p3.next;
p1 = p1.next;
}
if(flag == 1){
ListNode s= new ListNode(1);
p3.next = s;
p3 = p3.next;
}
return head.next;
}

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