链表相加
2016-04-28 14:51
363 查看
链表相加:
给定两个链表,分别表示两个非负整数。它们的数字逆序存储在链表中,且每个结点中存储一个数字,计算两个数的和,并且返回和的链表头指针。
如:输入:2->4->3,5->6->4.
输出:7->0->8.
程序实现:
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
给定两个链表,分别表示两个非负整数。它们的数字逆序存储在链表中,且每个结点中存储一个数字,计算两个数的和,并且返回和的链表头指针。
如:输入:2->4->3,5->6->4.
输出:7->0->8.
程序实现:
/************************************ File Name:ListAdd.cpp Author: godfrey Created Time: 2016/04/28 *************************************/ #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef struct tagSNode{ int value; tagSNode* pNext; tagSNode(int v):value(v),pNext(NULL) {} }SNode; //打印链表 void Print(SNode* pHead){ SNode* p = pHead->pNext; while(p){ cout<<p->value<<" "; p = p->pNext; } cout<<endl; } //删除分配结点空间 void Destroy(SNode* pHead){ SNode* p = pHead->pNext; while(p){ pHead->pNext = p->pNext;//与头插法相反 delete p; p = pHead->pNext; } delete pHead; } //链表相加 SNode* ListAdd(SNode* pHead1,SNode* pHead2){ SNode* pSum = new SNode(0); SNode* pTail = pSum;//新结点插入pTail的后面 SNode* p1 = pHead1->pNext; SNode* p2 = pHead2->pNext; SNode* pCur = NULL; int carry = 0;//进位 int value; //处理两者都存在的加法 while(p1&&p2){ value = p1->value + p2->value +carry; carry = value / 10; value %= 10; pCur = new SNode(value); pTail->pNext = pCur; pTail = pCur; p1 = p1->pNext; p2 = p2->pNext; } //处理长的链表 SNode* p = p1 ? p1 : p2; while(p){ value = p->value +carry; carry = value / 10; value %= 10; pCur = new SNode(value); pTail->pNext = pCur; pTail = pCur; p = p->pNext; } //处理可能存在的进位 if(carry!=0){ pTail->pNext = new SNode(carry); } return pSum; } int main() { SNode* pHead1 = new SNode(0); for(int i=0;i<6;i++){ SNode* p = new SNode(rand()%10); p->pNext = pHead1->pNext; pHead1->pNext = p; } SNode* pHead2 = new SNode(0); for(int i=0;i<9;i++){ SNode* p = new SNode(rand()%10); p->pNext = pHead2->pNext; pHead2->pNext = p; } Print(pHead1); Print(pHead2); SNode* pSum = ListAdd(pHead1,pHead2); Print(pSum); Destroy(pHead1); Destroy(pHead2); Destroy(pSum); return 0; }
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
相关文章推荐
- 针对某一网站的UI进行分析
- Maven模版Bug及解决办法
- vue.js-step-everthing-2
- 常用API索引
- 9轴传感器学习
- GET,POST,PUT,DELETE的区别
- 链表面试题--从尾到头打印单链表
- Java:String和Date、Timestamp之间的转换
- 测试mysql 是否连接成功
- Ubuntu下分区格式化U盘(fdisk&&mkfs)
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- Memcache查看运行状况
- 欢迎使用CSDN-markdown编辑器
- hdu 3746 Cyclic Nacklace
- 系统中的堆栈
- C++关键词 —— explicit
- Android四大布局之线性布局及其属性
- 使用CORS 实现Ajax的另类跨域
- 深入解析Android系统中应用程序前后台切换的实现要点
- curl 模拟http