阅读量:0
2两数相加
下面展示一些 内联代码片
。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* sumhead = nullptr; // 初始化头指针为nullptr ListNode* current = nullptr; // 初始化当前节点为nullptr int c = 0; // 进位标志 // 遍历两个链表,进行加法运算 while (l1 != nullptr || l2 != nullptr || c > 0) { int x = (l1 != nullptr) ? l1->val : 0; int y = (l2 != nullptr) ? l2->val : 0; int tempSUM = x + y + c; // 处理进位 if (tempSUM >= 10) { c = 1; tempSUM -= 10; } else { c = 0; } // 如果sumhead是nullptr,说明这是第一个节点 if (!sumhead) { sumhead = new ListNode(tempSUM);//动态分配新节点 current = sumhead; } else { // 否则,在current后面添加新节点 current->next = new ListNode(tempSUM); current = current->next; } // 更新链表指针 if (l1 != nullptr) l1 = l1->next; if (l2 != nullptr) l2 = l2->next; } return sumhead; } };