【LeetCode】LeetCode——第2題:Add Two Numbers


LeetCode第2題テーマ:
2. Add Two Numbers My Submissions
Question
Total Accepted: 111272 
Total Submissions: 512942 
Difficulty: Medium
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
タイトルの大まかな意味は:1つの整数は342のようで、チェーンテーブルの中で形式を保存するのは倒れています(つまり:2->4->3)、更に465のようで、チェーンテーブルの中で形式を保存するのは:5->6->4です.この2つの数を807に加算し、チェーンテーブルに格納して7−>0−>8と表現した.
この問題は難易度が中等で、実際には比較的直観的で、主にチェーンテーブルの操作を考察して、もちろん2つの数の長さの違い、および10進数の進位のいくつかの小さい細部に注意しなければならない.
コード:
/**
 * 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 *p = l1, *q = l2;
    	ListNode *r = (ListNode *)malloc(sizeof(ListNode));
    	ListNode *s = r;
    	int shi_val = 0;
    	while(p && q){
    		ListNode *t = (ListNode *)malloc(sizeof(ListNode));
    		t->val = (p->val + q->val + shi_val) % 10;
    		shi_val = (p->val + q->val + shi_val) / 10;
    		s->next = t;
    		s = t;
    		p = p->next;
    		q = q->next;
    	}
    	while(p){
    		ListNode *t = (ListNode *)malloc(sizeof(ListNode));
    		t->val = (p->val + shi_val) % 10;
    		shi_val = (p->val + shi_val) / 10;
    		s->next = t;
    		s = t;
    		p = p->next;
    	}
    	while(q){
    		ListNode *t = (ListNode *)malloc(sizeof(ListNode));
    		t->val = (q->val + shi_val) % 10;
    		shi_val = (q->val + shi_val) / 10;
    		s->next = t;
    		s = t;
    		q = q->next;
    	}
    	if(shi_val){
    		ListNode *t = (ListNode *)malloc(sizeof(ListNode));
    		t->val = shi_val;
    		s->next = t;
    		s = t;
    	}
    	s->next = NULL;
    	return r->next;
    }
};

コードを提出したら、無事ACを落とします.
run time
40 msです.