* 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中链表中两数据相加的程序说明的更多相关文章

  1. 【LeetCode题解】2_两数相加

    目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...

  2. Leetcode(2)两数相加

    Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

  3. Leetcode(2)-两数相加(包含链表操作的注意事项)

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  4. LeetCode -- 推断链表中是否有环

    思路: 使用两个节点.slow和fast,分别行进1步和2步.假设有相交的情况,slow和fast必定相遇:假设没有相交的情况,那么slow或fast必定有一个为null 相遇时有两种可能:1. 仅仅 ...

  5. leetcode刷题2:两数相加add_two_numbers

    题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...

  6. LeetCode Add Two Numbers 两个数相加

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  7. LeetCode题解002:两数相加

    两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  8. C语言链表之两数相加

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  9. Leetcode(二)两数相加

    两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...

随机推荐

  1. Virtualbox虚拟机配置CentOS7.0静态网络

    1.首先在Virtualbox下将网络设置为Bridged Adapter,此项设置可以使本机与虚拟机进行互访,而NAT模式只能进行单项访问: 2.先切换到root,配置网卡信息需要用到root,然后 ...

  2. UE4入门与精通

    由于目前在使用UE4引擎,多少也有一些心得,比如在日常使用中会遇到一些问题.坑(潜规则)或者一些使用技巧等.本人决定开一个大坑,主要有两个目的:一是可以自己做个记录,二是可以给大家提供一些参考吧.主要 ...

  3. 如何使用JDBC链接数据库

    1.加载数据库驱动 不同的数据库加载的驱动不一样 Class.forName(com.MySQL.jdbc.Driver) Class.forName(oracle.jdbc.driver.Oracl ...

  4. size_t 类型

    1 关于size_t定义 size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小.在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件 ...

  5. zTree Jquery eCharts

    (function(){ var setting = { view:{ dblClickExpand:false, expandSpeed:300 }, data: { simpleData: { e ...

  6. memcpy内存复制

    memcpy(predata,frame,1920*1080*4);

  7. 解决checkbox的attr(checked)一直为undefined问题

    需要做个一个全选的checkbox功能,遇到checkbox的attr("checked")一直为undefined,下面与大家分享下最终的解决方案   最近本屌丝应项目开发需求, ...

  8. Java程序猿学习的建议(转)

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

  9. Android 资源(resource详解(转)

    本文介绍在Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(l ...

  10. swift基础:第四部分:对函数和闭包的深入

    ()之前在什么公司,都自己做过哪些项目,从架构的角度来谈谈你的项目. () 你对iOS不同版本是怎么看的,你在做项目的过程当中,是如何应对版本问题的. () 你对iOS的性能是怎么优化的. () 你通 ...