チェーンテーブルシミュレーション加算問題


タイトルの説明
2つのチェーンテーブルが与えられ、各チェーンテーブルのノード値が数字の各ビットの数字であり、2つのチェーンテーブルが表す数字の和を求め、結果をチェーンテーブルとして返します.
チェーンテーブルのノード定義は次のとおりです.
typedef struct node *pNode;
struct node
{
	int data;
	struct node *next;
};

問題はちょっと言いにくいですが、例を見てください.
2つのチェーンテーブルがそれぞれlist 1およびlist 2であり、list 1の各ノード値がそれぞれ数字513のビット、10ビットおよび100ビットの数字であり、同じlist 2の各ノード値が数字295の各ビットの数字であると仮定する.この2つの数を808に加算するので、出力は1ビットから100ビットの順に出力され、返される結果チェーンテーブルは以下のようになる.
list1:  (3 -> 1 -> 5)
list2:  (5 -> 9 -> 2)
result:(8 -> 0 ->8)
 
ぶんせき
このテーマはおもしろいので、チェーンテーブルの操作に熟練する必要があります.2つの数値加算過程を考慮し,低位から高位まで順次加算し,キャリーがあればキャリーフラグをマークし,最高位まで終了した.現在のビットのノードをcurrentとすると、次のようになります.
current->data = list1->data + list2->data + carry(     ,      1,   0)

この問題を再帰的に解決するには、次のコードを使用します.
pNode addLists(pNode list1, pNode list2, int carry) {
	if (!list1 && !list2 && !carry)
		return NULL;
	pNode result = newNode(carry);
	int value = carry;
	if (list1)
		value += list1->data;
	if (list2)
		value += list2->data;
	result->data = value % 10;
	pNode more = addLists(list1?list1->next:NULL, list2?list2->next:NULL, value>=10?1:0);
	result->next = more;
	return result;
}