public static Node reverseAdd(Node list1, Node list2){
    Node head=null,last=null;
    int sum=0,carry=0;
    
    while(list1!=null || list2!=null || carry!=0){
      sum=carry;
      if(list1!=null){
        sum+=list1.data;
        list1=list1.next;
      }
      
      if(list2!=null){
        sum+=list2.data;
        list2=list2.next;
      }
      
      Node tmp=new Node(sum%10);
      if(last==null){
        head=tmp;
        last=tmp;
      }else{
        last.next=tmp;
        last=last.next;
      }
      
      carry=sum/10;
    }
    
    return head;
  }