Add Two Numbers

来源:互联网 发布:mac安装win10不用u盘 编辑:程序博客网 时间:2024/04/28 17:24

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 <iostream>using namespace std;struct ListNode {int val;ListNode *next;ListNode(int x):val(x),next(NULL){}};ListNode *reverseTheLinkLists(ListNode *l){ListNode *i;ListNode *j;ListNode *k;if(l == NULL || l->next == NULL)return l;i = l;j = l->next;if(j->next == NULL){i->next = NULL;j->next = i;return j;}else{k = j->next;i->next = NULL;while(k->next != NULL){j->next = i;i = j;j = k;k = j->next;}j->next = i;k->next = j;return k;}}ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {//l1 = reverseTheLinkLists(l1);//l2 = reverseTheLinkLists(l2);ListNode *p1 = l1;ListNode *p2 = l2;ListNode *res = NULL;ListNode *q = NULL;int index = 1;int inc = 0;while(p1!=NULL || p2!=NULL){ListNode *elem = (ListNode *)malloc(sizeof(ListNode));if(index == 1){res = elem;q = elem;}else{q->next = elem;q = elem;}if(p1==NULL&&p2!=NULL){int sum = p2->val + inc;elem->val = sum%10;inc = sum/10;p2 = p2->next;}if(p1!=NULL&&p2==NULL){int sum = p1->val + inc;elem->val = sum%10;inc = sum/10;p1 = p1->next;}if(p1!=NULL&&p2!=NULL){int sum = p1->val + p2->val + inc;elem->val = sum%10;inc = sum/10;p1 = p1->next;p2 = p2->next;}index++;}if(inc!=0){ListNode *elem = (ListNode *)malloc(sizeof(ListNode));elem->val = inc;q->next = elem;q = elem;}if(q!=NULL)q->next = NULL;return res;}void printLinkLists(ListNode *l){while(l!=NULL){cout << l->val << " ";l = l->next;}cout << endl;}int main(void){ListNode *l1 = NULL;ListNode *p = NULL;ListNode *elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 2;l1 = elem;p = elem;elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 4;p->next = elem;p = elem;elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 3;p->next = elem;p = elem;p->next = NULL;ListNode *l2 = NULL;ListNode *q = NULL;elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 5;l2 = elem;q = elem;elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 6;q->next = elem;q = elem;elem = (ListNode *)malloc(sizeof(ListNode));elem->val = 4;q->next = elem;q = elem;q->next = NULL;printLinkLists(l1);printLinkLists(l2);ListNode *res = addTwoNumbers(l1, l2);printLinkLists(res);system("pause");return 0;}


0 0
原创粉丝点击