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

链表相加(二)

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

//首先反转了两个链表,然后从头部开始相加链表的节点值,直到两个链表都为空且进位为0为止。在相加过程中创建新的节点,并将它们连接到结果链表。

typedef struct ListNode ListNode;

class Solution 
{
public:
    ListNode* addInList(ListNode* head1, ListNode* head2) 
    {
        // 首先反转两个链表
        ListNode* reversedHead1 = reverseList(head1);
        ListNode* reversedHead2 = reverseList(head2);
        
        ListNode* result = nullptr;
        int carry = 0;
        
        // 相加链表节点值,直到两个链表都为空且进位为0为止
        while (reversedHead1 || reversedHead2 || carry) {
            int sum = (reversedHead1 ? reversedHead1->val : 0) + (reversedHead2 ? reversedHead2->val : 0) + carry;
            carry = sum / 10;
            sum %= 10;
            
            // 创建新节点并连接到结果链表
            ListNode* newNode = new ListNode(sum);
            newNode->next = result;
            result = newNode;
            
            // 移动到下一个节点
            if (reversedHead1) reversedHead1 = reversedHead1->next;
            if (reversedHead2) reversedHead2 = reversedHead2->next;
        }
        
        return result;
    }

    // 辅助函数:反转链表
    ListNode* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* curr = head;
        while (curr) {
            ListNode* nextNode = curr->next;
            curr->next = prev;
            prev = curr;
            curr = nextNode;
        }
        return prev;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:25
点赞 评论 收藏
分享
昨天 15:12
门头沟学院 运营
点赞 评论 收藏
分享
点赞 评论 收藏
分享
八股刚起步,看了javaguide,小林coding,还有面渣,感觉面渣是体验最好的,请问只看面渣够用吗,有不完善的需要补吗?
码农索隆:先背最基础的知识,然后理解情景题,现在面试大多数喜欢问情景题,更考验面试者的基础和临场发挥情况
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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