链表系列之单链表——使用单链表实现大整数相加
原文:http://blog.csdn.net/iloveyoujelly/article/details/38321735
大数相加在我之前的一篇博客里有一个使用数组实现的方案,使用单链表实现更灵活。
有两个由单链表表示的数。每个结点代表其中的一位数字。
数字的存储是逆序的, 也就是说个位位于链表的表头。
写一函数使这两个数相加并返回结果,结果也由链表表示。
eg.
Input:(3->9->6), (4->7->8->3)
Output:(7->6->5->4)
- #include <iostream>
- #include <stack>
- using namespace std;
- typedef struct node
- {
- int data;
- node *next;
- }Node, *LinkList;
- //建立链表
- Node* createList(const int a[], int n)
- {
- Node *head, *endPtr;
- head = endPtr = NULL;
- for(int i=0;i<n;i++)
- {
- Node *temp = new Node; / /node = (struct Node *)malloc(sizeof(struct Node));
- temp->data = a[i];
- temp->next = NULL;
- if(i==0)
- {
- head = endPtr = temp;
- }
- else
- {
- endPtr->next = temp;
- endPtr = temp;
- }
- }
- return head;
- }
- /*从尾到头打印链表,要求不修改链表结构*/
- //使用栈适配器
- void PrintListReversing(LinkList pHead)
- {
- stack<Node*> nodes;
- Node* pNode = pHead;
- if(pNode==NULL)
- return;
- while(pNode!=NULL) //将节点依次入栈
- {
- nodes.push(pNode);
- pNode = pNode->next;
- }
- while(!nodes.empty()) //出栈
- {
- pNode = nodes.top(); //读取栈顶元素
- cout<<pNode->data;
- nodes.pop(); //删除栈顶元素
- }
- }
- //大数相加
- Node *ListAdd(Node* L1, Node* L2)
- {
- if(L1==NULL)
- return L2;
- if(L2==NULL)
- return L1;
- Node *ptr1 = L1, *ptr2 = L2, *ResultPtr=NULL, *TmpPtr=NULL;
- int carry = 0;
- Node *p_node = new Node();
- p_node->data = (L1->data+L2->data)%10;
- p_node->next = NULL;
- carry = (L1->data+L2->data)/10;
- ResultPtr = TmpPtr = p_node;
- TmpPtr->next = NULL;
- L1 = L1->next;
- L2 = L2->next;
- while(L1 && L2)
- {
- Node *pNode = new Node();
- TmpPtr->next = pNode;
- int tmp = L1->data+L2->data+carry;
- carry = tmp/10;
- pNode->data = tmp%10;
- pNode->next = NULL;
- TmpPtr = TmpPtr->next;
- L1 = L1->next;
- L2 = L2->next;
- }
- while(L1)
- {
- Node *pNode = new Node();
- TmpPtr->next = pNode;
- int tmp = L1->data+carry;
- carry = tmp/10;
- pNode->data = tmp%10;
- pNode->next = NULL;
- TmpPtr = TmpPtr->next;
- L1 = L1->next;
- }
- while(L2)
- {
- Node *pNode = new Node();
- TmpPtr->next = pNode;
- int tmp = L2->data+carry;
- carry = tmp/10;
- pNode->data = tmp%10;
- pNode->next = NULL;
- TmpPtr = TmpPtr->next;
- L2 = L2->next;
- }
- if(carry)
- {
- Node *pNode = new Node();
- TmpPtr->next = pNode;
- pNode->data = carry;
- pNode->next = NULL;
- }
- return ResultPtr;
- }
- int main()
- {
- int a[] = {1,9,9}; //991
- int b[] = {9,8,5,6,6,2,8}; //8266589
- Node *L1 = createList(a,3), *L2 = createList(b,7), *L3 = NULL;
- L3 = ListAdd(L1,L2);
- PrintListReversing(L1);
- cout<<"+";
- PrintListReversing(L2);
- cout<<"=";
- PrintListReversing(L3);
- cout<<endl;
- return 1;
- }
链表系列之单链表——使用单链表实现大整数相加相关推荐
- 力扣刷题——单链表系列——第一题:移除链表元素,从此链表初窥门径,神挡杀神~
题目链接:力扣 力扣刷题------>单链表系列 第一种解法:在原链表上进行操作,小红日烧脑版 /*** Definition for singly-linked list.* public c ...
- 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...
- 【数据结构】链表OJ特别篇 —— 面试情景带你深度剖析 环形链表系列问题 复制带随机指针的链表
- 大整数相加链表实现(Add Two Numbers)
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if(null == l1){return l2;}if(null == l2){re ...
- python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...
本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...
- c语言链表查找的代码与题目,链表的C语言实现之单链表的查找运算_c语言
建立了一个单链表之后,如果要进行一些如插入.删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作.单链表的基本运算包括:查找.插入和删除.下面我们就一一介绍这三种基本运算的算法,并结合 ...
- python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点
题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...
- c语言双链表排序交换节点_图解:单链表翻转的三种方式!
当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行翻转. 单链表反转,反转后的效果如下: 看起来很简单,只需要将单链表所有结点的 nex ...
- c语言单链表超市出库,c语言-单链表(二)
继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点 1.链表的判断是否为空 //1.判断链表是否为空 bool isempty_list(PNODE ...
最新文章
- zip压缩与解压缩示例
- 风控业务-模型稳定性评价指标PSI
- php if !=,php If else 用法
- SmartUpload 中文API帮助
- 黑大选修计算机模拟物理学,黑龙江大学学分制选课指南.doc
- 分析“关于Linux内核引入的accept_local参数的一个问题”
- 谁说中国没有 Linus?中国初代 IT 宗师封神榜
- tcp中的crc检验算法原理_CRC校验算法原理
- TOGAF 10 正式发布
- java程序员必备快捷键
- Docker 教程:如何将Helix QAC作为容器创建并运行 上
- 20140925百度校园招聘二面
- centos 使用iptables实现只允许中国IP访问服务器或者禁止访问
- 完整性校验用到常见的算法_文件完整性校验
- js简易版歌单播放,可切换下一首
- JAVA经典算法40题
- Diagnosing Intermittent Authentication Failures and User Lock-Outs in Oracle WebLogic
- 【排序】快排(霍尔快排)
- 安乐高机器人图纸_乐高机器人搭法,乐高机器人 8547 搭建图纸 PDF文件
- A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) UVA - 12412