笔试算法题:把两个链表的数字相加,然后存进一个链表

题目

有两个链表表示两个非负整数,每个链表的开始位置是数字的最高位,且链表每个节点只存储一位数字,求两个链表表示整数的和,结果也用同样的链表表示。
例:
链表一 : 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);

发现的不足

链表我是学的比较弱。
我是第一次在线笔试,可以在本地调试,但是要写出测试用例。我不会写测试用例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值