转载请注明:
原题如下:
题目解析:
题目的意思是“用插入排序的思想对单链表进行排序”。具体的算法已经告诉我们,“插入排序”,算法的时间复杂度为O(n^2),我们可以通过两层循环即可解决问题。外层循环每次都从head结点开始和后面的元素进行比较,内层循环每次都会从head走到链表的末尾,将最大的元素保存在链表的尾部。
题目代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head == NULL){
return head;
}
ListNode* p = head, *q, *next;
int temp;
int length = GetLength(head);
//external loop always start head.
while(p != NULL && --length){
q = p;
//internal loop compares value between two nodes.
while(q->next != NULL){
next = q->next;
if(q->val > next->val){
temp = q->val;
q->val = next->val;
next->val = temp;
}
q = next;
}
}
return head;
}
//calculate the length of the list
int GetLength(ListNode* head){
if(head == NULL){
return 0;
}
int length = 0;
while(head != NULL){
++length;
head = head->next;
}
return length;
}
};