题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

/**
 * 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) {
        // write code here
	//反转两个链表,使链表表头是低位
        ListNode* p1 = nullptr;
        ListNode* p2 = head1;
        ListNode* p3 = head1->next;
        while (p3) {
            p2->next = p1;
            p1 = p2;
            p2 = p3;
            p3 = p3->next;
        }
        p2->next = p1;
        head1 = p2;

        p1 = nullptr;
        p2 = head2;
        p3 = head2->next;
        while (p3) {
            p2->next = p1;
            p1 = p2;
            p2 = p3;
            p3 = p3->next;
        }
        p2->next = p1;
        head2 = p2;

	//添加一个空的头节点,指向两数相加结果的低位
        ListNode* pre = new ListNode(0);
        ListNode* cur = pre;
        int x = 0, y = 0, sum = 0, carry = 0;
        while (head1 || head2) {
            x = head1 == nullptr ? 0 : head1->val;
            y = head2 == nullptr ? 0 : head2->val;
            sum = x + y + carry;
            carry = sum / 10;
            sum = sum % 10;

            cur->next = new ListNode(sum);
            cur = cur->next;

            if (head1) head1 = head1->next;
            if (head2) head2 = head2->next;
        }
        if (carry == 1) {
            cur->next = new ListNode(1);
        }
	//反转结果链表
        p1 = nullptr;
        p2 = pre->next;
        p3 = p2->next;
        while (p3) {
            p2->next = p1;
            p1 = p2;
            p2 = p3;
            p3 = p3->next;
        }
        p2->next = p1;
        return p2;

    }
};

全部评论

相关推荐

05-30 13:04
已编辑
门头沟学院 算法工程师
智谱和米哈游都是ai大模型agent的业务钱的话还是米更多,几乎翻倍了,有没有老哥是两个公司其中一个的,能问问转正率咋样嘛,我问的hr回答都是做的好就可以转正暑期实习
码农索隆:选米哈游:短期高薪、敢承担风险、具备强创新能力,且愿押注游戏AI赛道。 选智谱:稳定性与行业通用能力积累,接受薪资差距以换取更稳妥的职业基础。
投递北京智谱华章科技等公司10个岗位 > 实习期间如何提升留用概率?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务