链表求和

来源:互联网 发布:0信誉淘宝店铺转让 编辑:程序博客网 时间:2024/05/21 10:34

描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

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

实现思路:首先如果两个链表当中有一个是空链表,就把另一个链表原样输出。另外,还要判断两个链表当中的元素个数的多少,方便进行加和运算。当两个对应元素相加,和大于十的时候,要把十位数字写在链表的下一个位置。

代码:/**
    ListNode *addLists(ListNode *l1, ListNode *l2) {
        // write your code here
         if (l1 == NULL)
            return l2;
        if (l2 == NULL)return l1;
        int c = 0;
        int sum = 0;
        ListNode *head = new ListNode(0);
        ListNode *p = head;
        while (l1 != NULL && l2 != NULL) {
            sum = l1->val+l2->val + c;
            c = sum/10;
           sum = sum%10;
            p->next = new ListNode(sum);
            p = p->next;
            l1 = l1->next;
            l2 = l2->next;
        }
        while (l1 != NULL) {
            sum = l1->val + c;
            c = sum/10;
            sum = sum%10;
            p->next = new ListNode(sum);
            p = p->next;
            l1 = l1->next;
        }
        while (l2 != NULL) {
            sum = l2->val + c;
            c = sum/10;
            sum = sum%10;
            p->next = new ListNode(sum);
            p = p->next;
            l2 = l2->next;
        }
        if (c != 0)  p->next = new ListNode(c);
        return head->next;
    }
};

做题感想:这道题看起来很简单,可是做起来觉得并不容易。前面的几种情况还好,到了后面元素相加的时候,就一直存在着wrong answer,总是有数据通不过。后来弯弯转转才改对。

0 0