题解 | #两个链表生成相加链表#
两个链表生成相加链表
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
之前做过字符串的加法,故而这里就先读取一次,得到两个链表的字符串表示,然后做字符串的加法即可。需要注意的是posa--; posb--;放置的位置在最后。
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
// write code here
String number1 = getNumber(head1);
String number2 = getNumber(head2);
int flag = 0, posa = number1.length() - 1;
int posb = number2.length() - 1;
StringBuilder result = new StringBuilder();
while(posa >= 0 || posb >= 0){
int a = posa >= 0 ? number1.charAt(posa) - '0' : 0;
int b = posb >= 0 ? number2.charAt(posb) - '0' : 0;
int sum_ = a + b + flag;
if(sum_ > 9) {
flag = 1;
sum_ = sum_ % 10;
}else{
flag = 0;
}
result.append(sum_);
posa--;
posb--;
}
if(flag == 1) result.append("1");
// 构建链表
String resultStr = result.toString();
int idx = resultStr.length() - 1;
ListNode head = new ListNode(0);
ListNode temp = head;
while(idx >=0){
int val = resultStr.charAt(idx) - '0';
ListNode p = new ListNode(val);
temp.next = p;
temp = p;
idx--;
}
return head.next;
}
public String getNumber(ListNode root){
ListNode temp = root;
StringBuilder sb = new StringBuilder();
while(temp!=null){
sb.append(String.valueOf(temp.val));
temp = temp.next;
}
return sb.toString();
}
}
深信服公司福利 790人发布