关于leetcode中链表中两数据相加的程序说明
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/ typedef struct ListNodep {
int val;
struct ListNodep *next;
}ListNode; ListNode* addTwoNumbers(ListNode* I1, ListNode* I2) {
ListNode *rootp = NULL;
ListNode *listp = NULL;
int value = 0;
int varin = 0; if(I1 == NULL && I2 == NULL) return rootp; listp = (ListNode *)malloc(sizeof(ListNode));
rootp = listp;
listp->val = 0;
listp->next = NULL; while(I1 != NULL || I2 != NULL || varin!= 0){ if(I1 == NULL && I2 != NULL) value = I2->val + varin; if(I1 != NULL && I2 == NULL) value = I1->val + varin; if(I2 != NULL && I1 != NULL) value = I1->val + I2->val + varin; if(I1 == NULL && I2 == NULL) value = varin; varin = 0; if(value >= 10){
varin = value /10;
value = value %10;
} //此处需要注意,此处需要注意当当前链表已经为NULL后,他指向的空链表
//不能够在往下操作了,需要直接在给当前指针为空链表
if(I1 == NULL) I1 = NULL;
else I1 = I1->next; if(I2 == NULL) I2 = NULL;
else I2 = I2->next; listp->val = value; if(I1 != NULL || I2 != NULL || varin != 0){
listp->next = (ListNode *)malloc(sizeof(ListNode));
listp = listp->next;}
else
{
listp->next = NULL;
}
} return rootp;
}
leetcode问题描述 :
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 -> 4)
Output: 7 -> 0 -> 8
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里的两个链表数据相加问题可不是那么简单,主要有一下几种情况
1、如果两个链表长度是一样的,就将链表中的元素相加输出即可
2、如果两个链表的长度不是一样的,就要短链表位的补齐,如果不是使用补齐的方法,就需要考虑在逻辑上消除这种现象
3、如果两个链表长度一样长,但是在最后一个元素相加出现了进位,那么就需要在最后一个链表上在添加一个链表,
所以其实这个问题还是蛮复杂的
下面是在c中运行时的代码 :
// list.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define ListDeep 1
typedef struct NODE{
NODE *P;
int data;
}ListTypr;
ListTypr list1[ListDeep];
ListTypr list2[ListDeep];
//---------------------------------------------------------------
void initlist(ListTypr *I1 , ListTypr *I2 , int listdeep){
for(short i = ; i < listdeep ; i++){
I1->data=;
if(i == listdeep-) I1->P= NULL;
else I1->P= I1+;
I1 = I1->P;
}
for(short i = ; i < listdeep ; i++){
I2->data=;
if(i == listdeep-) I2->P= NULL;
else I2->P= I2+;
I2 = I2->P;
}
}
ListTypr* addTwoNumbers(ListTypr* l1, ListTypr* l2) {
ListTypr *rootp = NULL;
ListTypr *listp = NULL;
int value = ;
int varin = ;
if(l1 == NULL && l2 == NULL) return rootp;
listp = (ListTypr *)malloc(sizeof(ListTypr));
listp->data = ;
listp->P = NULL;
rootp = listp;
while(l1 != NULL || l2 != NULL || varin != ){
if(l1 != NULL && l2 == NULL) value = l1->data + varin;
if(l1 == NULL && l2 != NULL) value = l2->data + varin;
if(l1 != NULL && l2 != NULL) value = l1->data + l2->data + varin;
if(l1 == NULL && l2 == NULL) {
value = varin;
varin = ;
}
if(value >= ){
varin = value / ;
value = value % ;
}
if(l1 == NULL) l1 = NULL;
else l1 = l1->P;
if(l2 == NULL) l2 = NULL;
else l2 = l2->P;
listp->data = value;
if(l1 != NULL || l2 != NULL || varin != ){
listp->P = (ListTypr *)malloc(sizeof(ListTypr));
listp = listp->P;}
else{
listp->P = NULL;
}
}
return rootp;
}
int _tmain(int argc, _TCHAR* argv[])
{
short listdeep = ListDeep;
ListTypr * plistresult = NULL;
ListTypr * rep = NULL;
int resultmatrix[];
short i = ;
initlist(&list1[] , &list2[] , listdeep);
plistresult = addTwoNumbers(&list1[] , &list2[]);
while(plistresult != NULL){
resultmatrix[i] = plistresult->data;
plistresult = plistresult->P;
i = i + ;
}
while();
return ;
}
关于leetcode中链表中两数据相加的程序说明的更多相关文章
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- LeetCode -- 推断链表中是否有环
思路: 使用两个节点.slow和fast,分别行进1步和2步.假设有相交的情况,slow和fast必定相遇:假设没有相交的情况,那么slow或fast必定有一个为null 相遇时有两种可能:1. 仅仅 ...
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- LeetCode Add Two Numbers 两个数相加
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- LeetCode题解002:两数相加
两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- C语言链表之两数相加
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- Leetcode(二)两数相加
两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
随机推荐
- 扩展映射 Diffusion maps
Diffusion maps接触到扩展映射,高维数据降维的相关东西. 扩展映射是一种非线性方法.
- 【转】Apache Digest验证
Apache默认使用basic模块验证,都是明文传输,不太安全,所以本文使用Digest来验证,以提高安全性. 1.Apache配置: A.目录权限配置 Alias /nagios "/us ...
- Zookeeper:通过yarn实现大型分布式管理系统
http://www.cnblogs.com/leesf456/p/6063694.html
- Testlink部署全攻略
部署前准备: xampp,我下载的链接:https://www.apachefriends.org/download.html Testlink,下载地址:https://sourceforge.ne ...
- 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
在实用VS编程的时候大家经常会遇到一个问题: 下面小编来为大家提供一个简单的解决方案: 1.在Windows中打开功能里输入regedit,回车打开注册表编辑器: 2.转到路径HKEY_LOCAL_M ...
- android 横向滚动条
/*** * 横向滚动条,修改版,从左向右滚动,支持html代码和html里面的网络图片 */public class MarqueeView extends LinearLayout { priva ...
- Android隐藏状态栏、导航栏
Android隐藏状态栏.导航栏 private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_INT<16){ this.getWi ...
- iOS 开发:利用第三方插件来安装CoCoapods
引言:通过上一篇博客我们知道了怎么样去通过终端来安装CoCoapods,这一篇我们着重与用第三方插件来安装CoCoapods: 1. 首先在提下链接下载插件 https://github.com/ka ...
- 调优SQL思路
--调优SQL --sqlreview ->logshipping -> ag辅助副本 --查看正确的执行计划 打开实际的执行计划set statistics io on --查看错误的执 ...
- JSON对象长度和遍历方法
摘自博客 (http://caibaojian.com/json-length.html) 原文链接:http://caibaojian.com/json-length.html JSON数组有长度j ...