链式A+B(解题报告)

来源:互联网 发布:音频转文字软件 编辑:程序博客网 时间:2024/06/06 02:27

有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。

给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

测试样例:

{1,2,3},{3,2,1}

返回:{4,4,4}

思路:从头处理A和B,因为低位在前高位在后,符合链表的处理顺序。注意处理好进位与本位相加,同时注意长度不一致时的问题和长度一致时进位的问题。


public ListNode plusAB(ListNode a, ListNode b) {ListNode pHead=null;ListNode tail=pHead;boolean jinwei=false;        while(a!=null&&b!=null){        int temp=a.val+b.val;                if(pHead==null){        if(jinwei){        pHead=new ListNode(1);            tail=pHead;        }        else{        pHead=new ListNode(0);            tail=pHead;        }        }        else{        if(jinwei){        tail.next=new ListNode(0);        temp+=1;            tail=tail.next;        }        else{        tail.next=new ListNode(0);            tail=tail.next;        }        }                if(temp>=10){        temp-=10;        jinwei=true;        }        else{        jinwei=false;        }        tail.val+=temp;        a=a.next;        b=b.next;        }        while(a!=null){        int temp=a.val;        if(jinwei){    tail.next=new ListNode(0);    temp+=1;        tail=tail.next;    }    else{    tail.next=new ListNode(0);        tail=tail.next;    }                if(temp>=10){        temp-=10;        jinwei=true;        }        else{        jinwei=false;        }        tail.val+=temp;        a=a.next;        }        while(b!=null){        int temp=b.val;        if(jinwei){    tail.next=new ListNode(0);    temp+=1;        tail=tail.next;    }    else{    tail.next=new ListNode(0);        tail=tail.next;    }                if(temp>=10){        temp-=10;        jinwei=true;        }        else{        jinwei=false;        }        tail.val+=temp;        b=b.next;        }        if(a==null&&b==null){        if(jinwei){        tail.next=new ListNode(1);        tail=tail.next;        }        }        return pHead;    }




原创粉丝点击