LeetCode 445 Add Two Numbers II(栈+链表)
来源:互联网 发布:vscode go环境 编辑:程序博客网 时间:2024/05/06 23:21
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 8 -> 0 -> 7
题目大意:给出两个非空链表,求两个链表所代表的数字之和。
解题思路:遍历每个链表,将值存入两个栈中,然后对栈顶元素操作即可。
代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct Node{ int val; struct Node* next;};struct StackNode{ int size; struct Node* top;};typedef struct StackNode* Stack;void makeEmpty(Stack stk){ stk->size = 0; stk->top = NULL;}Stack createStack(){ Stack stk = malloc(sizeof(struct StackNode)); makeEmpty(stk); return stk;}void push(Stack stk, int x){ struct Node* tmp = malloc(sizeof(struct Node)); tmp->next = NULL; tmp->val = x; if(stk->size == 0){ stk->top = tmp; }else{ tmp->next = stk->top; stk->top = tmp; } stk->size++;}void pop(Stack stk){ struct Node* tmp = stk->top; stk->top = tmp->next; stk->size--; free(tmp);}int top(Stack stk){ if(stk && stk->top) return stk->top->val; return 0;}void destroyStack(Stack stk){ while(stk->size){ pop(stk); } free(stk);}void traverse(struct ListNode* list, Stack stk){ while(list){ push(stk, list->val); list = list->next; }}struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { Stack stk1 = createStack(); Stack stk2 = createStack(); Stack ans = createStack(); traverse(l1, stk1); traverse(l2, stk2); int sum = 0; while(stk1->size || stk2->size){ if(stk1->size){ sum += top(stk1); pop(stk1); } if(stk2->size){ sum += top(stk2); pop(stk2); } push(ans, sum % 10); sum /= 10; } if(sum) push(ans, sum); destroyStack(stk1); destroyStack(stk2); return ans->top;}
0 0
- LeetCode 445 Add Two Numbers II(栈+链表)
- Leetcode#445(链表)-Add Two Numbers II
- Leetcode Add Two Numbers II 445
- leetcode 445 Add Two Numbers II C++
- LeetCode #445: Add Two Numbers II
- 【leetcode 445】Add Two Numbers II
- LeetCode.2(445) Add Two numbers(II)
- LeetCode#445 Add Two Numbers II (week15)
- [LeetCode]Add Two Numbers II
- Add Two Numbers II ---LeetCode
- Leetcode Add Two Numbers II
- LeetCode-Add Two Numbers II
- 445-Add Two Numbers II
- Sum—LeetCode-445 Add Two Numbers II
- leetcode -- 445. Add Two Numbers II 【栈 + 正整数相加】
- 445. Add Two Numbers II leetcode (list)
- LeetCode 445. Add Two Numbers II
- leetcode-445. Add Two Numbers II
- Android流式布局实现历史搜索记录
- HDU1864:最大报销额(01背包)
- QT通过资源文件来调用图片
- 模拟器错误
- Ceph的数据的重平衡和数据一致性的实现方式
- LeetCode 445 Add Two Numbers II(栈+链表)
- Word将图片格式大小设置成一样大小
- oracle查询想要的字符在哪个表,哪个字段
- PHP flock 文件锁详细介绍
- Python学习--下载图片--下载百度的固定页面图片
- quartz实际使用
- python 类继承,对类属性的改变
- 【Shell】快速清理大量文件
- spring项目中解决跨域问题