- /// <summary>
- /// This method sorts elements in linked list and returns a new sorted linked list
- /// </summary>
- /// <param name="head">head node of unsorted linked list</param>
- /// <param name="count">number of elements in unsorted linked list</param>
- /// <returns>head node of new sorted linked list</returns>
- public static Node SortLinkedList(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;
- }
- //该片段来自于http://www.codesnippet.cn/detail/070120131400.html
来源: http://www.codesnippet.cn/detail/070120131400.html