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 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     struct ListNode *next;
 6  * };
 7  */
 8
 9 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
10     struct ListNode *q=l1,*p=l2,*cur,*pre;
11     int len1=0,len2=0,len=0;
12     while(q){
13         len1++;
14         q=q->next;
15     }
16     while(p){
17         len2++;
18         p=p->next;
19     }
20     int flag=0;
21     if(len1>len2){
22         q=l1;
23         p=l2;
24         flag=1;
25     }else{
26         q=l2;
27         p=l1;
28         flag=0;
29     }
30     int car=0,x,y;
31     while(q){
32         x=q?q->val:0;
33         y=p?p->val:0;
34         q->val=(x+y+car)%10;
35         car=(x+y+car)/10;
36         pre=q;
37         if(q) q=q->next;
38         if(p) p=p->next;
39     }
40     if(car){
41         struct ListNode *tmp=(struct ListNode*)malloc(sizeof(struct ListNode));
42         tmp->val=car;
43         tmp->next=NULL;
44         pre->next=tmp;
45     }
46     return flag?l1:l2;
47 }

原文地址:https://www.cnblogs.com/shixinzei/p/12400602.html

时间: 2024-10-12 07:31:44

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

面试题 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

LeetCode 面试题24. 反转链表

题目链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/ 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 1 /** 2 * Definition for singly-linked list.

LeetCode | 面试题06. 从尾到头打印链表【剑指Offer】【Python】

LeetCode 面试题06. 从尾到头打印链表[剑指Offer][Easy][Python][链表] 问题 力扣 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 思路 解法一 reverse函数 时间复杂度: O(n),n为 head 链表长度. 空间复杂度: O(n),n为 head 链表长度. Python3代码 # Definition for si

LeetCode:面试题 08.05. 递归乘法

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

C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + 在线验证后提交 选项2: VS Code本地Debug + 在 LeetCode 插件中验证和提交 为什么要刷LeetCode 大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook.LinkedIn.Amazon/Apple.Google.Microsoft),或国

LeetCode | 面试题34. 二叉树中和为某一值的路径【剑指Offer】【Python】

LeetCode 面试题34. 二叉树中和为某一值的路径[剑指Offer][Medium][Python][回溯] 问题 力扣 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / 4 8 / / 11 13 4 / \ / 7 2 5 1 返回: [ [5,4,11,2], [5,8,4,5] ] 提示: 节点总数 <= 10000 注意:本题与主站 1

leetcode——Insertion Sort List 对链表进行插入排序(AC)

Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *result; result->val = INT_MIN; result->next = NULL; ListNode *cur=head,*

Leetcode:Swap Nodes in Pairs 链表成对交换节点

Swap Nodes in Pairs: Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the va

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

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