算法基础

来源:互联网 发布:mac新建的文件夹在哪里 编辑:程序博客网 时间:2024/04/29 20:01

链表求和

题目:
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例:
给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
分析:
相同位置相加,如果不足补0,如果加到最后,进位不为0,还需要另外添加一个节点。
答案:

/** * 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 r = null, pre = null, mid;        // 进位值        int temp = 0;        // 个位数        int num = 0;        while (true) {            if (null == l1 && null == l2) {                break;            }            num = (l1.val + l2.val + temp) % 10;            if (null == pre) {                pre = new ListNode(num);                r = pre;            } else {                mid = new ListNode(num);                pre.next = mid;                //r = pre;                pre = pre.next;            }            temp = (l1.val + l2.val + temp) / 10;            if (null == l1.next && null == l2.next) {                break;            }            l1 = l1.next == null ? new ListNode(0) : l1.next;            l2 = l2.next == null ? new ListNode(0) : l2.next;        }        if (temp > 0) {            pre.next = new ListNode(temp);        }        return r;    }}
0 0
原创粉丝点击