public static Node root = null;
public static void Main()
Console.WriteLine("\n\n\t\t\tOriginal Linked List\n");
Node first = null, second = null;
Console.WriteLine("\n\n\t\t\tAddition(Iteration) Linked List \n");
Console.WriteLine("null");
Console.WriteLine("null");
AdditionIterative(first, second);
Node sum = AdditionRecursive(first, second, null, 0);
Console.Write("\n\n\t\tSUM : ");
Console.Write(sum.Value + " -> ");
Console.WriteLine("null");
Console.WriteLine("\n\n\t\t\tAddition Different Size (Iteration) Linked List \n");
AdditionDifferntSizeIteration(first, second);
Console.WriteLine("\n\n\t\t\tReverse(Iteration) Linked List \n");
Console.WriteLine("\n\n\t\t\tReverse(Recursive) Linked List \n");
Console.WriteLine("\n\n\t\t\tDelete Middle Item from Linked List \n");
public static void AdditionIterative(Node first, Node second){
Node addition = null, n = null;;
while(first != null && second != null){
int sum = first.Value + second.Value + c;
Console.Write("\n\n\t\tSUM : ");
Console.Write(temp.Value + " -> ");
Console.WriteLine("null");
public static Node AdditionRecursive(Node first, Node second, Node sum, int c){
if(first != null && second != null){
int v = first.Value + second.Value + c;
AdditionRecursive(first.Next, second.Next, n, c);
public static int carry = 0;
public static void AdditionDifferntSizeIteration(Node first, Node second){
int firstLen = GetLength(first);
int secondLen = GetLength(second);
Console.WriteLine("\nfirst length = {0}\tsecond length = {1}", firstLen, secondLen);
first = PadZeros(first, secondLen - firstLen);
second = PadZeros(second, firstLen - secondLen);
Console.WriteLine("null");
Console.WriteLine("null");
Node sum = Addition(first, second, null);
Node n = new Node(carry);
Console.WriteLine("null");
public static Node Addition(Node n1, Node n2, Node sum){
if(n1 != null && n2 != null){
sum = Addition(n1.Next, n2.Next, sum);
int s = n1.Value + n2.Value + carry;
public static Node PadZeros(Node node, int diff){
public static int GetLength(Node node){
public static Node Add(Node root, int val){
Node node = new Node(val);
public static void Print(Node node){
Console.Write(node.Value + " -> ");
public static void DeleteModdleItem(){
public static void Reverse(){
public static void ReverseRec(Node node){
public int Value{get;set;}
public Node Next{get;set;}