Linkcode 167 链表求和

来源:互联网 发布:知乎 如何练宽 编辑:程序博客网 时间:2024/06/05 15:34
描述:
 

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。

写出一个函数将两个整数相加,用链表形式返回和。
 

样例:

给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
 

题解:

和二进制求和一样,不过这换成了十进制求和,操作的数据结构也变成了链表,其他思路都一样
 

代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    /**     * @param l1: the first list     * @param l2: the second list     * @return: the sum list of l1 and l2      */    ListNode *addLists(ListNode *l1, ListNode *l2) {        // write your code here        ListNode *p = l1;        ListNode *q = l2;                int num = 0, c = 0;                ListNode *pHead = NULL;  //链表的头结点         ListNode *pTemp = NULL;  //链表的尾结点                 //将链表相同长度部分相加         while(p != NULL && q != NULL)        {            num = p->val + q->val + c;            c = num / 10;            num = num % 10;                        ListNode *Node = new ListNode(num);                        if(pHead == NULL)            {                pHead = Node;            }            else            {                pTemp->next = Node;            }                        pTemp = Node;                        p = p->next;            q = q->next;        }                //如果p链表长,将长的部分加上         while(p != NULL)        {            num = p->val + c;            c= num / 10;            num = num % 10;                        ListNode *Node = new ListNode(num);            if(pHead == NULL)            {                pHead = Node;            }            else            {                pTemp->next = Node;            }                        pTemp = Node;                        p = p->next;        }                //如果q链表长,将长的部分加上         while(q != NULL)        {            num = q->val + c;            c= num / 10;            num = num % 10;                        ListNode *Node = new ListNode(num);            if(pHead == NULL)            {                pHead = Node;            }            else            {                pTemp->next = Node;            }                        pTemp = Node;                        q = q->next;        }                //如果还有进位,将进位加上         if(c != 0)        {            ListNode *Node = new ListNode(c);            pTemp->next = Node;        }                return pHead;                    }};


0 0