Leetcode#445(链表)-Add Two Numbers II

来源:互联网 发布:淘宝指南针店铺 编辑:程序博客网 时间:2024/05/27 09:44

题目:

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.

思路:

方法一:将两个链表翻转,将两个链表依次相加(进位),最后得到的结果再翻转输出。

通过代码:

class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {        if(l1==NULL)return l2;        else if(l2==NULL)return l1;        ListNode* p1 = reverseList(l1);        ListNode* p2 = reverseList(l2);        ListNode* new_node = NULL;        int up=0;         int temp=0;        int digit=0;        ListNode* pre = new ListNode(0);        ListNode* m = pre;        while(p1!=NULL||p2!=NULL){            if(p1==NULL){                temp=p2->val;                p2 = p2->next;            }            else if(p2==NULL){                temp=p1->val;                p1 = p1->next;            }            else {                temp = p1->val+p2->val;                p1=p1->next;                p2=p2->next;            }            digit = (up+temp)%10;             up = (up+temp)/10; //进位            new_node = new ListNode(digit);            m->next = new_node;            m=m->next;        }        if(up>0){            new_node = new ListNode(up);            m->next = new_node;            m=m->next;        }        m->next = NULL;        return reverseList(pre->next);    }        ListNode* reverseList(ListNode* head){        if(head==NULL||head->next==NULL)return head;        ListNode* pre_node = new ListNode(0);        ListNode* cur = head;        ListNode* temp = NULL;        while(cur!=NULL){            temp = cur;            cur = cur->next;            temp ->next = pre_node->next;            pre_node->next = temp;        }        return pre_node->next;    }};

方法二:(不翻转链表)待续..

0 0
原创粉丝点击