链表求和

来源:互联网 发布:短信验证码平台源码 编辑:程序博客网 时间:2024/05/19 17:08

题目

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

解题

通过新建结点求和
注意进位情况,特别是最后可能还要进位的

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null;       *     } * } */public class Solution {    /**     * @param l1: the first list     * @param l2: the second list     * @return: the sum list of l1 and l2      */    public ListNode addLists(ListNode l1, ListNode l2) {        // write your code here        ListNode p1 = l1;        ListNode p2 = l2;        if(p1 == null)            return p2;        if(p2 == null)            return p1;        ListNode head = new ListNode(0);        ListNode p3 = head;        int flag = 0;        while(p1!=null && p2!=null){            int sum = flag + p1.val + p2.val;            flag = sum/10;            sum = sum%10;            ListNode s = new ListNode(sum);            p3.next = s;            p3 = p3.next;            p1 = p1.next;            p2 = p2.next;        }        p1 = p1==null?p2:p1;        while(p1!=null ){            int sum = flag + p1.val;            flag = sum/10;            sum = sum%10;            ListNode s= new ListNode(sum);            p3.next = s;            p3 = p3.next;            p1 = p1.next;        }        if(flag == 1){            ListNode s= new ListNode(1);            p3.next = s;            p3 = p3.next;        }        return head.next;    }}

通过修改其中一个结点的值方法

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null;       *     } * } */public class Solution {    /**     * @param l1: the first list     * @param l2: the second list     * @return: the sum list of l1 and l2      */    public ListNode addLists(ListNode l1, ListNode l2) {        // write your code here        ListNode p1 = l1;        ListNode p2 = l2;        if(p1 == null)            return p2;        if(p2 == null)            return p1;        ListNode head = new ListNode(0);        ListNode p3 = head;        int flag = 0;        while(p1!=null && p2!=null){            int sum = flag + p1.val + p2.val;            flag = sum/10;            sum = sum%10;            p1.val = sum;            p3.next = p1;            p3 = p3.next;            p1 = p1.next;            p2 = p2.next;        }        p1 = p1==null?p2:p1;        while(p1!=null ){            int sum = flag + p1.val;            flag = sum/10;            sum = sum%10;            p1.val = sum;            p3.next = p1;            p3 = p3.next;            p1 = p1.next;        }        if(flag == 1){            ListNode s= new ListNode(1);            p3.next = s;            p3 = p3.next;        }        return head.next;    }}
0 0
原创粉丝点击