面试题 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, ListNode* l2)
    {
        ListNode *head = new ListNode(-1), *p1 = l1, *p2 = l2, *p = head;
        int sum = 0, carr = 0;
        while (p1 || p2 || carr)
        {
            sum = 0;
            if(p1)
            {
                sum += (p1->val);
                p1 = p1->next;
            }
            if(p2)
            {
                sum += (p2->val);
                p2 = p2->next;
            }
            sum += carr;
            ListNode *t = new ListNode(sum % 10);
            carr = sum / 10;
            p->next = t;
            p = p->next;
        }
        return head->next;
    }
};

原文地址:https://www.cnblogs.com/Hunter01/p/12628930.html

时间: 2024-11-10 11:19:33

面试题 02.05. 链表求和的相关文章

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

【面试题015】链表中倒数第k个结点

[面试题015]链表中倒数第k个结点    可以用两个指针,当第一个指针指向了第k个时候,第二个指针让他指向链表的第一个元素,然后这两个指针同时向后面移动, 当第一个指针移动到末尾的时候,第二个指针指向的就是倒数第K个结点:两个指针的间距保持为k-1: 当我们遍历列表的时候发现用一个指针是解决不了问题的,我们可以尝试用两个指针来解决问题, 一个指针走的比另外一个指针走得快一点,或者先让其中的一个指针走了若干步,然后再让第二个指针来走: kth.cpp: 123456789101112131415

毕设进度2020.02.05

毕设进度2020.02.05 继续建立数据库和基础代码: 新闻数据库 政策数据库 原文地址:https://www.cnblogs.com/liurx/p/12267248.html

LeetCode:面试题 08.05. 递归乘法

面试题 08.05. 递归乘法 题目要求: 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘.可以使用加号.减号.位移,但要吝啬一些. 解题思路: 思路1:直接将乘法分成多个n相加,比较直接暴力: 判断其中较小的数,然后将较大数data相加,一共加n个. 思路2: 1. 巧用位运算,二进制位中,两个相邻位之间差2^1; 2. 同样将两个数分成最大和最小: 3. 通过判断最低位是否为1,进行移位操作,将每次的移位加在一起. 例子:A = 9, B = 7: A x B = 9

程序员面试金典-面试题 02.04. 分割链表

题目: 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间. 示例: 输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8 分析: 可以新建两个链表存储小于x的节点和大于等于x的节点,然后再将

[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.节点的数据结构定义如下: //节点

02 单链表

线性表之链式存储---单链表 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 // 数据结构 6 typedef struct node 7 { 8 int data; 9 struct node *next; 10 }linkList; 11 12 // 创建单链表,并初始化 13 linkList *linkList_init(void) 14 { 15 linkList *l

链表求和

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