LeetCode Q2
来源:互联网 发布:网络监听技术 编辑:程序博客网 时间:2024/05/01 07:46
今天手痒痒,又找时间趁热打铁写了第二个问题的算法。
第二个问题的题目是将两个非负整数用链表表示,然后对其进行求和,原题如下:
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
#include "stdafx.h"#include <iostream>#include <string>using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* l = (ListNode*)malloc(sizeof(ListNode));l->next = NULL;ListNode* p = l;ListNode* p1 = l1;ListNode* p2 = l2;int flag = 0;//标记是否进位for(;p1!=NULL || p2!=NULL;){ListNode* node = (ListNode*)malloc(sizeof(ListNode));if(p1!=NULL && p2!=NULL){if(p1->val + p2->val + flag >= 10){node->val = (p1->val + p2->val + flag ) % 10;node->next = NULL;p->next = node;p = p->next;flag = 1;}else {node->val = (p1->val + p2->val + flag );node->next = NULL;p->next = node;p = p->next;flag = 0;}p1 = p1->next;p2 = p2->next;}else if(p2 == NULL){if(p1->val + flag >= 10){node->val = (p1->val + flag ) % 10;node->next = NULL;p->next = node;p = p->next;flag = 1;}else {node->val = (p1->val + flag );node->next = NULL;p->next = node;p = p->next;flag = 0;}p1 = p1->next;}else {if(p2->val + flag >= 10){node->val = (p2->val + flag ) % 10;node->next = NULL;p->next = node;p = p->next;flag = 1;}else {node->val = (p2->val + flag );node->next = NULL;p->next = node;p = p->next;flag = 0;}p2 = p2->next;}}if(flag == 1){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = flag;node->next = NULL;p->next = node;p = p->next;flag = 0;}return l->next;}int _tmain(int argc, _TCHAR* argv[]){ListNode* l1 = (ListNode*)malloc(sizeof(ListNode));//给链表结点开辟空间并初始化,malloc和->next = NULL是链表必备初始化项目ListNode* l2 = (ListNode*)malloc(sizeof(ListNode));l1->next = NULL;l2->next = NULL;int num1=5,num2=5;/*cout<<"please input two non-negative numbers:"<<endl;cin>>num1;cin>>num2;*/if(num1<0 || num2<0){cout<<"sorry! you input the wrong numbers!"<<endl;return -1;}ListNode* p = l1;if(num1==0){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = 0;node->next = NULL;p->next = node;p = p->next;}else{for(;num1 != 0;num1 = (num1 - p->val)/10){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = num1 % 10;node->next = NULL;p->next = node;p = p->next;}}p = l2;if(num2==0){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = 0;node->next = NULL;p->next = node;p = p->next;}else{for(;num2 != 0;num2 = (num2 - p->val)/10){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->val = num2 % 10;node->next = NULL;p->next = node;p = p->next;}}ListNode* result = addTwoNumbers(l1->next,l2->next);while(result!=NULL){cout<<result->val;result = result->next;if(result!=NULL)cout<<"->";}cout<<endl;return 0;}
总结:
1.数据结构的知识不能忘,要保证任何时候想写就能写,而且不能错
2.LeetCode不把测试程序展示出来,传参经常会出错,我忍不住要吐槽一下。。。
刷完第二题,再给自己加加油!
0 0
- LeetCode Q2
- Leetcode Q2: Add Two Numbers
- LeetCode-Q2-Add Two Numbers
- leetCode Q2:Add Two Numbers(java)
- Q2.3
- Q2.4
- Q2.5
- Unladen Swallow 2009Q2
- 中文搜索引擎2010Q2市场份额
- [Python Challenge] - Q2
- Project Euler Q2 解法
- Q2.4 Partition List
- 2016-Q2 BUG清单
- Q2.Add Two Numbers
- Q2--替换空格
- CS231n Assignment1--Q2
- CS231n Assignment2--Q2
- CS231n Assignment3--Q2
- java数据库连接池配置
- 1099. Build A Binary Search Tree (30)
- ViewPager实现左右循环滑动及轮播效果(广告栏效果)
- jplayer 播放器
- MAC 终端常用的简单命令
- LeetCode Q2
- oracle报错总结
- UIImageView响应点击事件
- [240] Search a 2D Matrix II
- android菜鸟进阶之路——播放音乐和视频
- 不同时间粒度下的数据处理action
- leetCode #286 Missing Number
- gitlab - hook - jenkins
- 【leetcode每日一题】Reorder List