LintCode_167 链表求和

题目

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

样例

给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

思路

当前位相加 考虑进位

C++代码

ListNode *addLists(ListNode *l1, ListNode *l2) {
	// write your code here
    	ListNode* head = NULL;
    	ListNode*p1, *p2, *q, *p;
    	q = head;
    	p1 = l1;
    	p2 = l2;
    	int cp = 0;
    	int t1;
    	int t2;
    	while (p1 || p2)
    	{
    		if (p1)
    		{
    			t1 = p1->val;
    			p1 = p1->next;
    		}
    		else t1 = 0;
    		if (p2)
    		{
    			t2 = p2->val;
    			p2 = p2->next;
    		}
    		else t2 = 0;
    		int sum = t1 + t2 + cp;
    		cp = sum / 10;
    		if (sum >= 10)
    		{
    			sum = sum % 10;
    		}
    		ListNode* p = new ListNode(sum);
    		if (!head) head = q = p;
    		else q = q->next = p;
    	}
    	if (cp)
    	{
    		p = new ListNode(cp);
    		q = q->next = p;
    	}
    	return head;
    }

  

时间: 2024-10-06 03:46:50

LintCode_167 链表求和的相关文章

[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 -&

链表求和

你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode

【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 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