-
题目链接:https://leetcode-cn.com/problems/add-two-numbers/
-
思路:
- 创建一个新链表
ans
用于储存和,遍历l1,l2加和 - 用
cnt
判断进位,遍历ans
链表,如果val >= 10
则cnt = true
,val %= 10
; - 上一步的最后一步是进行判断链表的最后一个节点能否仅进位,但是他没有下一个节点进行进位操作,所以我们需要加入一个新的节点,进行进位
- 创建一个新链表
-
代码:
/** * 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* addNewListNodeTail(ListNode *list, ListNode *p){ if(list == nullptr) list = p; else{ ListNode *head = list; while(head -> next != nullptr){ head = head -> next; } head -> next = p; } return list; } ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *ans = nullptr; while(l1 || l2){ ListNode *p = new ListNode(0, nullptr); if(l1){ p -> val += l1 -> val; l1 = l1 -> next; } if(l2){ p -> val += l2 -> val; l2 = l2 -> next; } ans = addNewListNodeTail(ans, p); } ListNode *head = ans; bool cnt = false; while(head){ if(cnt == true){ head -> val ++; cnt = false; } if(head -> val >= 10){ cnt = true; head -> val %= 10; } head = head -> next; } if(cnt == true){ ListNode *p = new ListNode(1, nullptr); ans = addNewListNodeTail(ans, p); } return ans; } };
2.两数相加
最新推荐文章于 2024-09-27 20:46:47 发布