题解 | #链表相加(二)#基于stack的方法

链表相加(二)

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
#include <vector>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    stack<ListNode*> getstack(ListNode* head) {
        stack<ListNode*> s;
        while (head) {
            s.push(head);
            head = head->next;
        }
        return s;
    }
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        if (head1 == nullptr) return head2;
        if (head2 == nullptr) return head1;
        if (!head1 && !head2) return nullptr;

        stack<ListNode*> s1 = getstack(head1);
        stack<ListNode*> s2 = getstack(head2);
        int carry = 0;
        ListNode* node = new ListNode(0);
        while (!s1.empty() || !s2.empty() || carry) {
          int num1 = s1.empty() ? 0 : s1.top()->val;
            int num2 = s2.empty() ? 0 : s2.top()->val;

            if (!s1.empty()) s1.pop();
            if (!s2.empty()) s2.pop();

            int sum = num1 + num2 + carry;
            carry = sum / 10;
            ListNode* dummy = new ListNode(sum % 10);
            dummy->next=node->next;
            node->next=dummy;
        }
        return node->next;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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