题目
有两个链表表示两个非负整数,每个链表的开始位置是数字的最高位,且链表每个节点只存储一位数字,求两个链表表示整数的和,结果也用同样的链表表示。
例:
链表一 : 8->5->7->3->8 表示 85738
链表二 : 5->7->3->5->4 表示 57354
返回结果链表:1->4->3->0->9->2
要求
1、 用注释写清楚思路、变量;先在当前页面书写代码,写完后可以在本地工具进行调试。(最后的代码能run起来)
2、例出完整的测试用例。( 用例可以在main方法中使用注释的方式列出 )
3、尽量使用时间和空间复杂度优的方法
4、语言不限。
自己想的解法
这道题我没有做过,现想的。
class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public class Solution {
public ListNode sum(ListNode l1,ListNode l2){
//将链表的数字存在栈中,计算和,然后再存入一个新的链表
Stack<Integer> list1 = new Stack<Integer>();
Stack<Integer> list2 = new Stack<Integer>();
Stack<Integer> sum = new Stack<Integer>();
ListNode res = new ListNode(0);
ListNode tempres = res;
while(l1!=null){
list1.add(l1.val);
l1 = l1.next;
}
while(l2!=null){
list2.add(l2.val);
l2 = l2.next;
}
int sumoverten = 0,bit1 = 0, bit2 = 0, bitsum = 0;
while(!list1.isEmpty()&&!list2.isEmpty()){
bit1 = list1.pop();
bit2 = list2.pop();
bitsum = bit1+bit2+sumoverten;
sumoverten = bitsum/10; //两位之和的进位
sum.add(bitsum%10); //两位之和的个位数
}
while(!list1.isEmpty()) {
bit1 = list1.pop();
bitsum = bit1 +sumoverten;
sumoverten = bitsum/10;
sum.add(bitsum%10);
}
while(!list2.isEmpty()) {
bit2 = list2.pop();
bitsum = bit2 +sumoverten;
sumoverten = bitsum/10;
sum.add(bitsum%10);
}
while(!sum.isEmpty()){
tempres.next = new ListNode(sum.pop());
tempres = tempres.next;
}
return res.next;
}
public static void main(String[] args) {
Solution sol = new Solution();
// ListNode l1 =new ListNode(1);
// ListNode temp1 = l1;
// for (int i = 2;i<4;i++) {
// temp1.next = new ListNode(i);
// temp1 = temp1.next;
// }
// ListNode l2 =new ListNode(3);
// ListNode temp2 = l2;
// for (int i = 4;i<8;i++) {
// temp2.next = new ListNode(i);
// temp2 = temp2.next;
// }
//
//
ListNode sum = sol.sum(l1,l2);
发现的不足
链表我是学的比较弱。
我是第一次在线笔试,可以在本地调试,但是要写出测试用例。我不会写测试用例