示例#1
0
        private LinkedList_Node <int> MergeAlternateNodes(LinkedList_Node <int> list1, LinkedList_Node <int> list2)
        {
            if (list1 == null)
            {
                return(list2);
            }

            if (list2 == null)
            {
                return(list1);
            }

            var list1_temp = list1;
            var list2_temp = list2;

            var retNode = list1_temp;

            while (list1 != null && list2 != null)
            {
                list1_temp = list1.next;
                list2_temp = list2.next;


                list1.next      = list2;
                list1.next.next = list1_temp;

                list1 = list1.next.next;
                list2 = list2_temp;
            }

            return(retNode);
        }
示例#2
0
        private LinkedList_Node <int> DivideList(LinkedList_Node <int> node)
        {
            LinkedList_Node <int> oldHead = node;
            int mid = GetLength(node) / 2;

            if (node.next == null)
            {
                return(node);
            }


            while (mid - 1 > 0)
            {
                oldHead = oldHead.next;
                mid--;
            }
            LinkedList_Node <int> newHead = oldHead.next;

            oldHead.next = null;
            oldHead      = node; // make one pointer points at the beginning of the first half of the list

            LinkedList_Node <int> t1 = DivideList(oldHead);
            LinkedList_Node <int> t2 = DivideList(newHead);

            return(MergeList(t1, t2));
        }
示例#3
0
        private LinkedList_Node <int> MergeList(LinkedList_Node <int> t1, LinkedList_Node <int> t2)
        {
            if (t1 == null)
            {
                return(t2);
            }

            if (t2 == null)
            {
                return(t1);
            }

            LinkedList_Node <int> t = null;

            if (t1.data < t2.data)
            {
                t      = t1;
                t.next = MergeList(t1.next, t2);
            }
            else
            {
                t      = t2;
                t.next = MergeList(t1, t2.next);
            }

            return(t);
        }
示例#4
0
        private LinkedList_Node <int> MoveEvenNodesToEndOfList(LinkedList_Node <int> node)
        {
            LinkedList_Node <int> oddNode = node;
            LinkedList_Node <int> evenNode = null, prev = null;

            while (oddNode != null && oddNode.next != null)
            {
                if (oddNode.next != null)
                {
                    var newNode = oddNode.next;
                    oddNode.next = oddNode.next.next;

                    newNode.next = evenNode;
                    evenNode     = newNode;
                }

                prev    = oddNode;
                oddNode = oddNode.next;
            }

            if (oddNode != null)
            {
                oddNode.next = evenNode;
            }
            else
            {
                prev.next = evenNode;
            }

            return(node);
        }
示例#5
0
        private LinkedList_Node <int> InsertAtCorrectPosition(LinkedList_Node <int> head, int val)
        {
            if (head == null)
            {
                return(new LinkedList_Node <int>(val));
            }

            // Inserting node at header
            if (head.data >= val)
            {
                var temp = new LinkedList_Node <int>(val);
                temp.next = head;
                return(temp);
            }

            // Inserting at Middle or Last
            var retNode = head;

            while (head != null && head.next != null && head.next.data < val)
            {
                head = head.next;
            }

            var next    = head.next;
            var newNode = new LinkedList_Node <int>(val);

            head.next    = newNode;
            newNode.next = next;

            return(retNode);
        }
示例#6
0
 private void PrintNode(LinkedList_Node <int> node)
 {
     while (node != null)
     {
         Console.WriteLine(node.data);
         node = node.next;
     }
 }
示例#7
0
        private LinkedList_Node <int> MergeTwoSortedLists(LinkedList_Node <int> list1, LinkedList_Node <int> list2)
        {
            if (list1 == null)
            {
                return(list2);
            }

            if (list2 == null)
            {
                return(list1);
            }

            LinkedList_Node <int> retNode = null;

            if (list1.data < list2.data)
            {
                retNode = list1;
                list1   = list1.next;
            }
            else
            {
                retNode = list2;
                list2   = list2.next;
            }
            var result = retNode;

            while (list1 != null && list2 != null)
            {
                if (list1.data < list2.data)
                {
                    retNode.next = list1;
                    list1        = list1.next;
                    retNode      = retNode.next;
                }
                else
                {
                    retNode.next = list2;
                    list2        = list2.next;
                    retNode      = retNode.next;
                }
            }

            if (list1 != null)
            {
                retNode.next = list1;
            }

            if (list2 != null)
            {
                retNode.next = list2;
            }


            return(result);
        }
示例#8
0
        private LinkedList_Node <int> AddNodeAtFront(LinkedList_Node <int> node, int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                var temp = new LinkedList_Node <int>(arr[i]);
                temp.next = node;
                node      = temp;
            }

            return(node);
        }
示例#9
0
        private int GetLength(LinkedList_Node <int> node)
        {
            int count = 0;
            LinkedList_Node <int> temp = node;

            while (temp != null)
            {
                temp = temp.next;
                count++;
            }
            return(count);
        }
示例#10
0
 public void Push(int value)
 {
     if (list == null)
     {
         list = new LinkedList_Node <int>(value);
     }
     else
     {
         var temp = new LinkedList_Node <int>(value);
         temp.next = list;
         list      = temp;
     }
 }
示例#11
0
        private LinkedList_Node <int> ReverseLinkedList_Recursive(LinkedList_Node <int> curr, LinkedList_Node <int> prev, LinkedList_Node <int> head)
        {
            if (curr == null)
            {
                head = prev;
                return(head);
            }

            head      = ReverseLinkedList_Recursive(curr.next, curr, head);
            curr.next = prev;

            return(head);
        }
示例#12
0
        public LinkedList_Node <int> Pop()
        {
            var curr = list;

            if (curr == null)
            {
                return(null);
            }
            else
            {
                var next = curr.next;
                list = next;
            }
            return(curr);
        }
示例#13
0
        public void Enqueue(int value)
        {
            LinkedList_Node <int> node = new LinkedList_Node <int>(value);

            if (front == null)
            {
                front = node;
                rear  = node;
            }
            else
            {
                rear.next = node;
                rear      = node;
            }
        }
示例#14
0
        public LinkedList_Node <int> Dequeue()
        {
            if (front == null)
            {
                return(null);
            }

            LinkedList_Node <int> temp = front;

            front = front.next;

            if (front == null)
            {
                rear = null;
            }

            return(temp);
        }
示例#15
0
        private LinkedList_Node <int> ReverseLinkedList_Iterative(LinkedList_Node <int> head)
        {
            if (head == null || head.next == null)
            {
                return(head);
            }

            LinkedList_Node <int> prev    = null;
            LinkedList_Node <int> current = head;

            while (current != null)
            {
                LinkedList_Node <int> next = current.next;

                current.next = prev;

                prev    = current;
                current = next;
            }

            return(prev);
        }
示例#16
0
        private LinkedList_Node <int> IntersectionOfTwoSortedLists(LinkedList_Node <int> list1, LinkedList_Node <int> list2)
        {
            if (list1 == null || list2 == null)
            {
                return(null);
            }

            LinkedList_Node <int> head = null, tail = null;

            while (list1 != null && list2 != null)
            {
                if (list1.data == list2.data)
                {
                    if (head == null)
                    {
                        tail = head = new LinkedList_Node <int>(list1.data);
                    }
                    else
                    {
                        tail = tail.next = new LinkedList_Node <int>(list1.data);
                    }

                    list1 = list1.next;
                    list2 = list2.next;
                }
                else if (list1.data < list2.data)
                {
                    list1 = list1.next;
                }
                else
                {
                    list2 = list2.next;
                }
            }

            return(head);
        }
示例#17
0
        private LinkedList_Node <int> AddNodeAtLast(LinkedList_Node <int> node, int[] arr)
        {
            if (node == null)
            {
                node = new LinkedList_Node <int>();
            }
            LinkedList_Node <int> retNode = node;

            for (int i = 0; i < arr.Length; i++)
            {
                node.data = arr[i];
                if (i != arr.Length - 1)
                {
                    node.next = new LinkedList_Node <int>();
                }
                else
                {
                    node.next = null;
                }
                node = node.next;
            }

            return(retNode);
        }
示例#18
0
        private LinkedList_Node <int> RemoveDuplicatesOnSortedNodes(LinkedList_Node <int> node)
        {
            LinkedList_Node <int> retNode = node;

            if (node == null || node.next == null)
            {
                return(node);
            }

            while (node != null && node.next != null)
            {
                if (node.data == node.next.data)
                {
                    var nextNext = node.next.next;
                    node.next = nextNext;
                }
                else
                {
                    node = node.next;
                }
            }

            return(retNode);
        }
示例#19
0
        private void MoveFrontNodeOfListToAnotherList(LinkedList_Node <int> list1, LinkedList_Node <int> list2)
        {
            if (list1 == null || list2 == null)
            {
                Console.WriteLine("Invalid Input");
            }

            Console.WriteLine("Before ListNode1 - ");
            PrintNode(list1);
            Console.WriteLine("Before ListNode2 - ");
            PrintNode(list2);

            LinkedList_Node <int> retSecondNode = list2.next;

            list2.next = null;
            list2.next = list1;
            list1      = list2;
            list2      = retSecondNode;

            Console.WriteLine("After ListNode1 - ");
            PrintNode(list1);
            Console.WriteLine("After ListNode2 - ");
            PrintNode(list2);
        }