Leetcode2

来源:互联网 发布:mac文明5汉化包下载 编辑:程序博客网 时间:2024/05/22 02:31

2.

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


注意:两个链表中的数字为逆序排列,输入为2 -> 4 -> 3和5 -> 6 -> 4,实际上相加时为342+465=807,输出时也要逆序:708。


参考戴方勤的源代码:

/**

 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode dummy(-1);
        int carry=0;
        ListNode *prev=&dummy;
        for(ListNode *pa=l1,*pb=l2;pa!=nullptr||pb!=nullptr;
        pa=pa==nullptr?nullptr:pa->next,pb=pb==nullptr?nullptr:pb->next,prev=prev->next){
            int ai=pa==nullptr?0:pa->val;
            int bi=pb==nullptr?0:pb->val;
            int value=(ai+bi+carry)%10;
            carry=(ai+bi+carry)/10;
            prev->next=new ListNode(value);
        }
        if(carry>0)
        prev->next=new ListNode(carry);
        return dummy.next;
    }
    
};


    结构体中已经定义:

ListNode(int x) : val(x), next(NULL) {}

即创建一个只有整型数作为输入的节点,则默认该节点的next指针为空。

    创建的结点:

    ListNode dummy(-1);

为头结点,数据域为-1,指针域为空。

    carry为进位标志。

    ListNode *prev=&dummy;     定义一个指针,指向dummy头结点,为活动指针。

    if(carry>0)
        prev->next=new ListNode(carry);如果最后一位相加后有进位,则开辟一个新结点存放进位。

    return dummy.next;返回结果链表的头结点指针。以便访问链表中的每个结点。

 









0 0