• 2. 两数相加


    #include<iostream>
    #include<stdio.h>
    #include<vector>
    #include <algorithm>
    #include <functional>
    #include<string>
    #include<fstream>
    #include <sstream>
    using namespace std;
    // Definition for singly-linked list.
     struct ListNode 
     {
         int val;
        ListNode *next;
         ListNode(int x) : val(x), next(NULL) 
    	 {}
     };
    class Solution 
    {
    public:
    	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
    	{
    		ListNode *nextL1 = l1->next;////指向下一个结点的指针
    		ListNode *nextL2 = l2->next;//指向下一个结点的指针
    		ListNode *result = new ListNode(0);//创建新元素
    		ListNode *trueResult = result;//最后的结果result指向trueResult,这样可以获取result所接收的全部元素,而result的指针由于每次都往下移,所以每次都更新
    		int sum = l1->val + l2->val;//初始化sum,未考虑进位
    		int jinWei = 0;//进位初始化未0
    		if (sum >= 10)//获得进位值
    		{
    			jinWei = sum / 10;
    			result->val = sum % 10;//获得result的值
    		}
    		else
    		{
    			result->val = sum;////获得result的值
    			jinWei = 0;
    		}
    
    		while (nextL1 != NULL || nextL2 != NULL|| jinWei > 0)
    		{
    			int nextL1Val = 0;
    			int nextL2Val = 0;
    
    			if (nextL1 != NULL)
    			{
    				nextL1Val = nextL1->val;
    				nextL1 = nextL1->next;
    			}
    			if (nextL2 != NULL){
    				nextL2Val = nextL2->val;
    				nextL2 = nextL2->next;
    			}
    			sum = nextL1Val + nextL2Val + jinWei;
    			if (sum >= 10)
    			{
    				jinWei = sum / 10;
    				result->next = new ListNode(sum % 10);
    			}
    			else{
    				result->next = new ListNode(sum);
    				jinWei = 0;
    			}
    			result = result->next;
    			
    		}
    
    		return trueResult;
    	}
    
    };
    void trimLeftTrailingSpaces(string &input) {
    	input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {
    		return !isspace(ch);
    	}));
    }
    
    void trimRightTrailingSpaces(string &input) {
    	input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {
    		return !isspace(ch);
    	}).base(), input.end());
    }
    
    vector<int> stringToIntegerVector(string input) {
    	vector<int> output;
    	trimLeftTrailingSpaces(input);
    	trimRightTrailingSpaces(input);
    	input = input.substr(1, input.length() - 2);
    	stringstream ss;
    	ss.str(input);
    	string item;
    	char delim = ',';
    	while (getline(ss, item, delim)) {
    		output.push_back(stoi(item));
    	}
    	return output;
    }
    
    ListNode* stringToListNode(string input) {
    	// Generate list from the input
    	vector<int> list = stringToIntegerVector(input);
    
    	// Now convert that list into linked list
    	ListNode* dummyRoot = new ListNode(0);
    	ListNode* ptr = dummyRoot;
    	for (int item : list) {
    		ptr->next = new ListNode(item);
    		ptr = ptr->next;
    	}
    	ptr = dummyRoot->next;
    	delete dummyRoot;
    	return ptr;
    }
    
    string listNodeToString(ListNode* node) {
    	if (node == nullptr) {
    		return "[]";
    	}
    
    	string result;
    	while (node) {
    		result += to_string(node->val) + ", ";
    		node = node->next;
    	}
    	return "[" + result.substr(0, result.length() - 2) + "]";
    }
    
    int main() 
    {
    	string line;
    	while (getline(cin, line)) 
    	{
    		ListNode* l1 = stringToListNode(line);
    		getline(cin, line);
    		ListNode* l2 = stringToListNode(line);
    
    		ListNode* ret = Solution().addTwoNumbers(l1, l2);
    
    		string out = listNodeToString(ret);
    		cout << out << endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    sum left join 多次引发的问题
    WPF之Binding基础三 Binding的路径Path
    解决Android Studio启动不了的办法
    指向常量的指针和常量指针的区别简单理解
    简单的字符串操作
    QT问答
    log4qt使用示例
    在线代码库
    Qt5的windows开放环境准备
    QT 调试技术
  • 原文地址:https://www.cnblogs.com/277223178dudu/p/10761330.html
Copyright © 2020-2023  润新知