LeetCode_2_AddTwoNumbers(Java Code)

来源:互联网 发布:21lic单片机项目外包网 编辑:程序博客网 时间:2024/06/05 23:44

题目:使用两个链表来表示非负整数,每个节点保存单个数字,位是倒序排列的,即个位是链表的第一个元素, 百位是链表的第二个元素, 以此类推,例如:链表1是3->4->5表示的数值是543,将两个链表所表示的数相加,使用链表存储结果并返回。LeetCode原题

/**  * @author ChrisWang * @Date 2016年2月20日 上午10:54:24  * @Description 两个链表表示非负整数,每个节点保存单个数字,位是倒序排列的(即个位是链表的第一个元素,  *              百位是链表的第二个元素, 以此类推),将其相加并返回一个链表 * @Example:输入: (2 -> 4 -> 3) + (5 -> 6 -> 4)  即表示数字342+465 *          输出: 7 -> 0 -> 8 该链表表示上面的两个数之和:807 * @Thinking:  */public class AddTwoNumbers {    // 测试方法    public static void main(String[] args) {        ListNode ln1_ele1 = new ListNode(8);// 第一个链表的第一个元素        ListNode ln1_ele2 = new ListNode(3);        ln1_ele1.next = ln1_ele2;        ListNode ln1_ele3 = new ListNode(1);        ln1_ele2.next = ln1_ele3;        ListNode ln2_ele1 = new ListNode(4);// 第二个链表的第一个数据        ListNode ln2_ele2 = new ListNode(7);        ln2_ele1.next = ln2_ele2;        ListNode result = addTwoNumbers(ln1_ele1, ln2_ele1);        while(result!=null) {            if(result.next==null) {                System.out.println(result.val);            } else {                System.out.print(result.val+"->");                          }            result = result.next;        }    }    /**     * 核心方法     * @param l1 第一个链表     * @param l2 第二个链表     * @return 新链表     */    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode result_head = new ListNode(); // 定义一个空链表,存放结果        ListNode listNode1 = l1;        ListNode listNode2 = l2;        ListNode listNode3 = result_head;        int carry = 0;        // 两个链表都没有遍历完        while(listNode1!=null || listNode2!=null) {            if(listNode1!=null) {                 carry += listNode1.val; // 取出当前位上的数值                listNode1 = listNode1.next; // 移动到下一位            }            if(listNode2!=null) {                carry += listNode2.val;                 listNode2 = listNode2.next;            }            listNode3.next = new ListNode(carry%10);// 取得同一数位上的两个数字之和的个位数            listNode3 = listNode3.next; // 指向下一位用来存放下一个元素            carry /= 10;// 如果有进位,则carry=1        }        // 循环结束,但要确认最后一次有没有进位        if(carry==1) {            listNode3.next = new ListNode(1);        }        return result_head.next;    }}/** * 单链表类 * Definition for singly-linked list. */class ListNode {    int val;    // 链表上的值    ListNode next;  // 链表上指向下一位的指针    ListNode() {    }    ListNode(int x) {        val = x;    }}
0 0
原创粉丝点击