【LeetCode2 Add Two Numbers】链表求和详解
来源:互联网 发布:淘宝抢红包微信群 编辑:程序博客网 时间:2024/06/07 07:25
一、问题描述
给定两个非空链表,其中链表中的每一个节点都是一个十以内的数字,链表的倒序数字串代表相应的十进制数值,因此每一个链表都会对应一个数值。题目中给定两个链表,需要求出其数值和,并将该数值和也相同的形式用链表表达,返回聊表的头结点。例如,给定聊表2->4->3和5->6->4,其代表的数值分别为342和465,数值和为907,将807用链表倒序表示为7->0->8,因此输出7->0->8链表的头结点。
二、思路分析
这道题思路有两种,第一种就是将两个链表根据定义将其转换成对应的十进制数,将两个十进制数相加后得到的结果再表达成链表的形式,这种方式的难点在于如何把十进制数用链表倒序进行表示,所需要的就是尾插法构建单链表的过程。而我选择的是另外一种思路,由于链表的读取顺序与十进制数的计算顺序一致,即十进制数的最低位恰好为链表的最高位,因此选择直接相加的办法。以长度更大的那条链表为结果链表,从头结点依次相加,如有进位则将进位用一个变量保存起来,并在下一个结点相加的时候加上进位值。当最后一个计算还存在进位时,则需要在结果链表尾部插入一个新节点。这种方法思路上更为简单,而且不需要额外的空间去存储结果,只是在链表操作的时候需要熟练。
三、代码实现
具体代码实现如下:
/** * 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) { int temp = 0,flag = 0; ListNode* result; ListNode* k; ListNode* t; if(ListLength(l1) > ListLength(l2)) { result = l1; k = l2; while(l1 != NULL) { if(l1->next == NULL) { t = l1; } if(l2 == NULL) { l1->val = l1->val + temp; temp = l1->val / 10; l1->val %= 10; l1 = l1->next; } else { l1->val = l1->val + l2->val + temp; temp = l1->val / 10; l1->val %= 10; l1 = l1->next; l2 = l2->next; } } if(temp == 0) { return result; } else { t->next = k; k->val = 1; k->next = NULL; } } else { result = l2; k = l1; while(l2 != NULL) { if(l2->next == NULL) { t = l2; } if(l1 == NULL) { l2->val = l2->val + temp; temp = l2->val / 10; l2->val %= 10; l2 = l2->next; } else { l2->val = l2->val + l1->val + temp; temp = l2->val / 10; l2->val = l2->val % 10; l1 = l1->next; l2 = l2->next; } } if(temp == 0) { return result; } else { t->next = k; k->val = 1; k->next = NULL; } } return result; } int ListLength(ListNode* l) { int len = 1; while(l != NULL) { len++; l = l->next; } return len; }};
阅读全文
0 0
- 【LeetCode2 Add Two Numbers】链表求和详解
- LeetCode2. Add Two Numbers(链表加法)
- [LeetCode2]Add Two Numbers
- leetcode2 add two numbers
- LeetCode2 Add Two Numbers
- LeetCode2:Add Two Numbers
- LeetCode2 Add Two Numbers
- leetCode2:Add Two Numbers
- leetcode2--Add Two Numbers
- leetcode2 Add Two Numbers
- LeetCode2:Add Two Numbers
- leetcode2 Add Two Numbers
- Leetcode2 Add Two Numbers
- LeetCode2.Add Two Numbers
- Leetcode2: Add Two Numbers
- LeetCode2. Add Two Numbers
- LeetCode2. Add Two Numbers
- leetcode2. Add Two Numbers
- PL/SQL 其它
- 定时器
- 解析死锁问题
- Android跨进程事件注入 Injecting to another application requires INJECT_EVENTS permission
- centos7使用rdo安装openstack遇到的问题
- 【LeetCode2 Add Two Numbers】链表求和详解
- 圆柱类
- CentOS 7系统中安装AutoDock Vina
- 你好,
- spring mvc 数据绑定问题 提交表单提示HTTP status 400, The request sent by the client was syntactically incorrect
- 通过x-shell向云服务器上传文件
- spring学习--总结IOC(控制反转)
- Javascript----Promise初步探究
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解