c++中ListNode定义与使用与leecode ListNode算法题
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) {} // 初始化时可以使用:该方式将x和next赋值给val和next
};
//main函数
ListNode* l3 = new ListNode(12); // new ListNode()c++使用new创建一个对象时必须用指针接收
ListNode vHead(0);
ListNode p = &vHead; //同等于l3的定义
cout << vHead.val << endl; // 0
cout << p->val << endl; // 0
ListNode l1 = new ListNode(2);
ListNode* l2 = new ListNode(4);
ListNode* l3 = new ListNode(3);
l1->next = l2;
l2->next = l3;
ListNode* l4 = new ListNode(5);
ListNode* l5 = new ListNode(6);
ListNode* l6 = new ListNode(4);
l4->next = l5;
l5->next = l6;
ListNode*res = addTwoNumbers(l1, l4);
cout << res->val << endl;
cout << res->next->val << endl;
cout << res->next->next->val << endl;
// methods
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode vHead(0), * p = &vHead;
int flag = 0;
int count = 1; // 次数
while (l1 || l2 || flag) {
int tmp = 0;
if (l1 != nullptr) tmp += l1->val;
if (l2 != nullptr) tmp += l2->val;
tmp += flag;
flag = tmp / 10; // 进一位的值tmp %= 10; // 余数,当前位的值ListNode* next = l1 ? l1 : l2;//如果l1或者l2有一个不是空指针,可以减少创建NodeList对象的过程,减少执行用时//next的next会被下一次循环给val赋值时覆盖if (next == nullptr) next = new ListNode(tmp);next->val = tmp;p->next = next;p = p->next;l1 = l1 ? l1->next : nullptr;l2 = l2 ? l2->next : nullptr;count += 1;
}
return vHead.next;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
