链表求和

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

样例

给出两个链表 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
        if(l1 == null)  return l2;
        if(l2 == null)  return l1;

        ListNode result = null;
        ListNode pNode = null;
        ListNode pNext = null;
        ListNode p = l1;
        ListNode q = l2;
        int up=0;
        while(p!=null&&q!= null){
            pNext = new ListNode(p.val+q.val +up);
            up = pNext.val/10;
            pNext.val = pNext.val%10;

            if(result == null){
                result = pNode = pNext;
            }
            else{
                pNode.next = pNext;
                pNode = pNext;
            }
            p = p.next;
            q = q.next;
        }

        while(p!= null){
            pNext = new ListNode(p.val + up);
            up = pNext.val/10;
            pNext.val = pNext.val%10;
            pNode.next = pNext;
            pNode = pNext;
            p = p.next;
        }
         while(q!= null){
            pNext = new ListNode(q.val + up);
            up = pNext.val/10;
            pNext.val = pNext.val%10;
            pNode.next = pNext;
            pNode = pNext;
            q = q.next;
        }
        if(up!= 0){
            pNext = new ListNode(up);
            pNode.next = pNext;
        }
        return result;
    }
}

  

时间: 2024-10-17 00:14:05

链表求和的相关文章

[C++]LeetCode: 108 Add Two Numbers (反序链表求和)

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -&

算法练习2之单链表求和

笔试题目: 1.用单向链表表示十进制整数,求两个正整数的和.如下图,1234+34=1268, 注意:单向链表的方向,不允许使用其他的数据结构. 题目分析: 题目中提到了,数据结构只能使用单链表,所以数组不在考虑范围之内. 因为将数字转为单链表以后,最高位排在表头,而我们进行整数加法的时候,是从个位开始的,与单链表的顺序相反.所以我们考虑对链表进行反转,然后再做加法. 其中反转和求和的示意图如下: 对求和以后的结果再进行反转: 下面是C++的实现 代码解读 1.节点的数据结构定义如下: //节点

LeetCode 面试题 02.05. 链表求和

题目链接:https://leetcode-cn.com/problems/sum-lists-lcci/ 给定两个用链表表示的整数,每个节点包含一个数位. 这些数位是反向存放的,也就是个位排在链表首部. 编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍. 示例: 输入:(6 -> 1 -&

【LintCode】链表求和

问题分析: 我们通过遍历两个链表拿到每个位的值,两个值加上前一位进位值(0或者1)模10就是该位的值,除以10就是向高位的进位值(0或者1). 由于两个链表可以不一样长,所以要及时判断,一旦为null,该位的值就要变成0. 有一种情况比较特殊,比如:1->1->1->null, 9->8->8->null,最终结果为0->0->0->1->null,需要保留最高位. 而1->1->1->null, 9->8->7-&

LintCode_167 链表求和

题目 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null 思路 当前位相加 考虑进位 C++代码 ListNode *addLists(ListNode *l1, ListNode *l2) { // write your co

LintCode Python 简单级题目 链表求和

原题描述: 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. 您在真实的面试中是否遇到过这个题? Yes 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null 标签 Cracking The Coding Interview 链表 高精度 # Definition for sin

面试题 02.05. 链表求和

https://leetcode-cn.com/problems/sum-lists-lcci/ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1

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

其实仔细想想是挺简单的,我们要做的只是记得进位. LinkedListNode addLists(LinkedListNode l1, LinkedListNode l2, int carry) //LinkedListNode addLists(LinkedListNode l1, LinkedListNode l2, int carry = 0) { if (l1 == null && l2 == null $$ carry == 0) { return null; } LinkedL

求两个用链表表示的整数的和

给定两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表首部.编写函数对这两个整数求和,并用链表形式返回结果. 进阶       假设这些数位是正向存放的. LinkedListNode addLists(LinkedListNode l1, LinkedListNode l2, int carry) { /*两个链表全部都为空且进位为0,则函数返回*/ if (l1 == null &&l2 == null&&carry == 0) { r