程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> LeetCode(2)Add Two Numbers

LeetCode(2)Add Two Numbers

編輯:關於C++

題目:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

分析:

這個題目涉及到鏈表知識,關於指針、鏈表自從接觸就是我的弱勢,到現在那麼多年過去了,依然沒有改變。但是,既然撞上了,還是必須義無反顧的應戰的。分析一下題目,它是說有兩個鏈表,每個鏈表存儲非負數值,鏈表的每個節點都是一位個位數字,數值倒序存儲在鏈表中,兩者求和並以鏈表的形式返回。 題目信息分析完畢後,開始動手吧,哎,依然是頭皮發麻呀~

AC代碼:

這個題目的代碼編寫到調試,再到最後的AC,可真是花費了不少功夫呀,好在功夫不負有心人,嘿嘿,問題代碼就不上傳了,下面貼出AC代碼:
/**
 * 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)
    {
        if(l1 == NULL)
            return l2;
        if(l2 == NULL)
            return l1;

        vector v1;
        vector v2;
        ListNode *head=NULL , *rear=NULL;
        while(l1 != NULL)
        {
            v1.push_back(l1->val);
            l1 = l1->next;
        }
        while(l2 != NULL)
        {
            v2.push_back(l2->val);
            l2 = l2->next;
        }

		if(v1.size() < v2.size())
		{
			for(int k=v1.size() ; knext = node;
                rear = rear->next;
            }
        }
        if(temp != 0 && rear!=NULL)
        {
            ListNode *node = new ListNode(temp);
            rear->next = node;
        }
        return head;
    }
};

測試Main函數:

為了方便測試,下面提供Main測試代碼,說明,在LeetCode頁面提交代碼,只需要上傳Solution類即可:
int main()
{
    ListNode *l1=NULL , *r1=NULL, *l2 = NULL , *r2=NULL , *result=NULL;
    int arr1[3] = {2,4,3};
    int arr2[3] = {5,6,4};
    for(int i=0 ; i<3 ; i++)
    {
        ListNode *node1 = new ListNode(arr1[i]);
        ListNode *node2 = new ListNode(arr2[i]);
        if(l1 == NULL)
            l1 = node1;
        if(r1 == NULL)
            r1 = node1;
        else{
            r1->next = node1;
            r1 = r1->next;
        }
        if(l2 == NULL)
            l2 = node2;
        if(r2 == NULL)
            r2 = node2;
        else{
            r2->next = node2;
            r2 = r2->next;
        }
    }
    Solution s;www.2cto.com
    result = s.addTwoNumbers(l1,l2);
    for( ; result!=NULL ; result=result->next)
        cout<val<<"->";
    cout<





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved