public static Node append(Node head, int data) { if (head != null) { Node current = head; while (current.Next != null) { current = current.Next; } current.Next = new Node(); current.Next.Data = data; return head; } else { head = new Node(); head.Data = data; return head; } }
public static Node AddToHead(Node head, int val) { //Inserts a new node in front of the existing one, returns new head. //Create new node. Node newFirstorHeadNode = new Node(); newFirstorHeadNode.Data = val; if (head == null) // Empty list { //easy. My linked list has one node, the one I just created. return newFirstorHeadNode; } //Otherwise //Point new one to old first one (which will now be second). newFirstorHeadNode.Next = head; //Return my new first item: return newFirstorHeadNode; }
public static void RecursivePrintList(Node head) { if (head == null) { Console.WriteLine(); return; } Console.Write(head.Data + " "); //Head of the remainder of the list is just the next one after this one. RecursivePrintList(head.Next); }
public static Node SortList(Node head, int count) { // Basic Algorithm Steps //1. Find Min Node //2. Remove Min Node and attach it to new Sorted linked list //3. Repeat "count" number of times Node _current = head; Node _previous = _current; Node _min = _current; Node _minPrevious = _min; Node _sortedListHead = null; Node _sortedListTail = _sortedListHead; for (int i = 0; i < count; i++) { _current = head; _min = _current; _minPrevious = _min; //Find min Node while (_current != null) { if (_current.Data < _min.Data) { _min = _current; _minPrevious = _previous; } _previous = _current; _current = _current.Next; } // Remove min Node if (_min == head) { head = head.Next; } else if (_min.Next == null) //if tail is min node { _minPrevious.Next = null; } else { _minPrevious.Next = _minPrevious.Next.Next; } //Attach min Node to the new sorted linked list if (_sortedListHead != null) { _sortedListTail.Next = _min; _sortedListTail = _sortedListTail.Next; } else { _sortedListHead = _min; _sortedListTail = _sortedListHead; } } return _sortedListHead; }
public static void ReverseUsingRecursion(Node head) { if (head == null) return; if (head.Next == null) { newHead = head; return; } ReverseUsingRecursion(head.Next); head.Next.Next = head; head.Next = null; }
public static void Reverse(ref Node head) { if (head == null) return; Node prev = null, current = head, next = null; while (current.Next != null) { next = current.Next; current.Next = prev; prev = current; current = next; } current.Next = prev; head = current; }
public static void PrintRecursive(Node head) { if (head == null) { Console.WriteLine(); return; } Console.Write("{0} ", head.Data); PrintRecursive(head.Next); }
public static void Print(Node head) { if (head == null) return; Node current = head; do { Console.Write("{0} ", current.Data); current = current.Next; } while (current != null); }
public static void Append(ref Node head, int data) { c++; if (head != null) { Node current = head; while (current.Next != null) { current = current.Next; } current.Next = new Node(); current.Next.Data = data; } else { head = new Node(); head.Data = data; } }