no more words, see codes:
using System;
namespace ConsoleApp10
{
class Program
{
public class Node
{
public int data;
public Node next;
}
//approach1: recursive
public static void AddTwoNumbers(Node header, Node cur, Node p1, Node p2, int carray)
{
if (p1 == null && p2 == null)
{
if (carray != 0)
{
if (cur == null)
{
cur = new Node();
}
else
{
cur.next = new Node();
cur = cur.next;
}
cur.data = carray;
}
return;
}
int l1 = 0;
int l2 = 0;
if (p1 != null)
{
l1 = p1.data;
p1 = p1.next;
}
if (p2 != null)
{
l2 = p2.data;
p2 = p2.next;
}
int sum = l1 + l2 + carray;
carray = sum /10;
if (cur == null)
{
cur = new Node();
}
else
{
cur.next = new Node();
cur = cur.next;
}
cur.data = sum - carray * 10;
if (header == null)
{
header = cur;
}
AddTwoNumbers(header, cur, p1, p2, carray);
}
//approach2:
public static Node GetList(Node p1, Node p2)
{
Node header = null;
int carry = 0;
Node curr = null;
while (p1 != null || p2 != null)
{
Node temp = new Node();
if (header == null)
{
header = temp;
}
if(curr == null)
{
curr = temp;
}
else
{
curr.next = temp;
curr = curr.next;
}
int l1 = 0;
int l2 = 0;
if (p1 != null)
{
l1 = p1.data;
p1 = p1.next;
}
if (p2 != null)
{
l2 = p2.data;
p2 = p2.next;
}
int sum = l1 + l2 + carry;
carry = sum / 10;
temp.data = sum - carry * 10;
}
if (carry != 0)
{
Node temp = new Node();
temp.data = carry;
curr.next = temp;
}
return header;
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Node l1 = new Node();
l1.data = 3;
Node l2 = new Node();
l2.data = 8;
Node l3 = new Node();
l3.data = 9;
l1.next = l2;
l2.next = l3;
Node l11 = new Node();
l11.data = 3;
Node l21 = new Node();
l21.data = 8;
l11.next = l21;
Node header = null;
Node cur = null;
AddTwoNumbers(header, cur, l1, l11, 0);
var cc = GetList(l1, l11);
}
}
}