题解 | 链表相加(二)

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b?tpId=295&tqId=1008772&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
     //用数组代替栈实现链表相加
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        if (!head1 || !head2) return head1 ? head1 : head2;  // 处理空指针

        // 动态数组存储节点值
        vector<int> A1, A2, A3;
        ListNode* p1 = head1, *p2 = head2;

        // 将链表值存入数组
        while (p1) { A1.push_back(p1->val); p1 = p1->next; }
        while (p2) { A2.push_back(p2->val); p2 = p2->next; }

        // 相加并处理进位
        int i = A1.size() - 1, j = A2.size() - 1, carry = 0;
        while (i >= 0 || j >= 0 || carry) {
        int sum = carry;
        if (i >= 0) sum += A1[i--];
        if (j >= 0) sum += A2[j--];
        A3.push_back(sum % 10);
        carry = sum / 10;
        }

        // 构建结果链表
        ListNode* p3 = new ListNode(0);  // 头节点
        ListNode* cur = p3;
        for (int k = A3.size() - 1; k >= 0; --k) {
          cur->next = new ListNode(A3[k]);
          cur = cur->next;
        }
        return p3->next;  // 返回实际头节点
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务