Add Two Numbers
Youare given two non-empty linkedlists representing two non-negative integers. The digits are stored in reverseorder and each of their nodes contain a single digit. Add the two numbers andreturn it as a linked list.
You may assume the two numbers do not contain any leading zero,except the number 0 itself.
Input: (2 -> 4 -> 3)+ (5 -> 6 -> 4)
Output: 7-> 0 -> 8
//本问题就是解决数据的相加问题,但是规则是向后进位的而不是向前进位的!
/**
*Definition for singly-linked list.
*struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
//给定的结构体,其中包括属性val 指针next指向下一个元素
// ListNode(int x) : val(x), next(NULL) {}表示定义一个ListNode(int x)函数,其中输入int x,:表示复制,将x值赋给val,将NULL赋值给next!
* };
*/
class Solution {
public:
ListNode*addTwoNumbers(ListNode* l1, ListNode* l2) {
//可以出,该函数的输出类型为ListNode类型,输出一个指针!
//可以l1,l2分为几种情况,一个为空则直接输出另一个!
if(l1==NULL)return l2;
if(l2==NULL)return l1;
ListNode *resList=NULL,*pNode=NULL,*pNext=NULL;
ListNode *p=l1,*q=l2;
//都不为空时,定义这些数据类型,其中,resList是结果、pNode是当前位置,pNext是下一个位置 p/q分别指向L1/L2
int up=0;
//用于储存进位数
while(p!=NULL&&q!=NULL)
//注意,存在一长一短的情况,所以使用上面循环
{
pNext = new ListNode(p->val + q->val + up);
up = pNext->val / 10; //计算进位
pNext->val = pNext->val % 10; //计算该位的数字
if (resList == NULL) //头结点为空
{
resList = pNode = pNext;
}
else //头结点不为空
{
pNode->next = pNext;
pNode = pNext;
}
p = p->next;
q = q->next;
//类似链表
}
//处理链表l1剩余的高位
while (p != NULL)
{
pNext = new ListNode(p->val + up);
up = pNext->val / 10;
pNext->val = pNext->val % 10;
pNode->next = pNext;
pNode = pNext;
p = p->next;
}
//处理链表l2剩余的高位
while (q != NULL)
{
pNext = new ListNode(q->val + up);
up = pNext->val / 10;
pNext->val = pNext->val % 10;
pNode->next = pNext;
pNode = pNext;
q = q->next;
}
//如果有最高处的进位,需要增加结点存储
if (up > 0)
{
pNext = new ListNode(up);
pNode->next = pNext;
}
return resList;
}
};
//这道题类似于大数计算
复习补充
结构体struct:
声明一个结构体 struct name{
int num; //声明一个整形变量num
charname[20]; //声明一个字符型数组name
charsex; //声明一个字符型变量sex
intage; //声明一个整形变量age
floatscore; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}
定义结构体变量 name n1,n2; 也可以直接使用结构体声明定义变量!
C++中的结构体和类的异同:
一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。
二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。类中的非static成员函数有this指针,类的关键字class能作为template模板的关键字即template<class T> class A{}; 而struct不可以。