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

链表相加(二)

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
#include <memory>
#include <stack>

class Solution {
 public:
  /**
   * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
   * 该题的关键是引入stack栈的数据,这样就迎刃而解。
   *
   * @param head1 ListNode类
   * @param head2 ListNode类
   * @return ListNode类
   */

  std::stack<ListNode*> PushStack(ListNode* head) {
    std::stack<ListNode*> data;
    while (head != nullptr) {
      data.push(head);
      head = head->next;
    }
    return data;
  }

  ListNode* addInList(ListNode* head1, ListNode* head2) {
    // write code here
    auto stack1 = PushStack(head1);
    auto stack2 = PushStack(head2);

    auto virtual_head = new ListNode(-1);
    auto cross = 0;

    auto AddNum = [&virtual_head, &cross](ListNode* temp) {
        auto sum = temp->val + cross;
        if (sum > 9) {
          sum -= 10;
          cross = 1;
        } else {
          cross = 0;
        }

        temp->val = sum;
        temp->next = virtual_head->next;
        virtual_head->next = temp;
    };

    while (!stack1.empty() && !stack2.empty()) {

      auto sum = stack1.top()->val + stack2.top()->val + cross;
      if (sum > 9) {
        cross = 1;
        sum = sum - 10;
      } else {
        cross = 0;
      }

      auto temp = stack1.top();
      temp->val = sum;
      temp->next = virtual_head->next;
      virtual_head->next = temp;

      stack1.pop();
      stack2.pop();
    }

    if (stack1.empty()) {
      while (!stack2.empty()) {
        auto temp = stack2.top();
        AddNum(temp);
        stack2.pop();
      }
    } else {
      while (!stack1.empty()) {
        auto temp = stack1.top();
        AddNum(temp);
        stack1.pop();
      }
    }

    if (cross == 1) {
      virtual_head->val = 1;
      return virtual_head;
    } else {
      auto ret = virtual_head->next;
      delete virtual_head;
      return ret;
    }

  }
};

全部评论

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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