LintCode-第168题 链表求和

描述:

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

样例:

   给出两个链表 3->1->5->null 5->9->2->null,返回 8->0->8->null

 public ListNode addLists(ListNode l1, ListNode l2) {
        // write your code here
         ListNode node = null;
         if(l1!=null&&l2!=null){
            ArrayList<Integer> list = getNodeValue(l1,l2);
	          node = setNode(list);
         }
	     return node;
    }
    //获得两个链表中的值
    private static ArrayList<Integer> getNodeValue(ListNode node1,ListNode node2 ) {
          //记录相加后获得的每一位
		    ArrayList<Integer> list = new ArrayList<Integer>();
		  int count=0;
		  int tag = 0;//仅为标志
		  while(true){
			  if(node1==null&&node2!=null){
				  count = node2.val+tag;
			  }
			  else if(node1!=null&&node2==null){
				  count = node1.val+tag;
			  }
			  else if(node1!=null&&node2!=null){
				  count = node1.val+node2.val+tag;
			  }else{
				  if(tag!=0){
					  list.add(tag);
				  }
				  break;
			  }
			 
			  tag = 0;
			  if(count>=10){//count大于10表示有进位
				  count %= 10;
				  tag = 1;
			  }
			  list.add(count);
			  if( node1!=null){
			    
			      node1 = node1.next;
			  }
			  if( node2!=null){
			    
			    node2 = node2.next;
			  }
		  }
		  
		 return list;
		  
	  }
    //将list中的值设置到链表中
    private ListNode setNode(ArrayList<Integer> list){
		  ListNode node=node = new ListNode(list.get(0));;
		  ListNode node2=node;
		  
		  for(int i=1;i<list.size();i++){
			  node2.next = new ListNode(list.get(i));
			  node2 = node2.next;
		  }
		  node2.next = null;
		  return node;
	  }



   

猜你喜欢

转载自blog.csdn.net/lin962792501/article/details/52444499