单链表排序,采用最简单的方法,建立一个数组,遍历链表,将每个结点的值存入数组,对数组排序,再将排序后的数组的值依次赋值给每个结点。完整代码如下。
class Solution { public: /** * * @param head ListNode类 the head node * @return ListNode类 */ ListNode* sortInList(ListNode* head) { // write code here ListNode *p = head; int count = 0; //获取结点个数 while(p != NULL){ count++; p = p->next; } int valArr[count]; p = head; //将每个结点的值存入数组 for(int i = 0;i < count;i++){ valArr[i] = p->val; p = p->next; } //对数组进行排序,这里使用简单的冒泡排序。若追求效率可选用其他排序。 for(int i = 0;i < count - 1;i++){ for(int j = 0;j < count - i - 1 ;j++){ if(valArr[j] > valArr[j + 1]){ int temp = valArr[j]; valArr[j] = valArr[j + 1]; valArr[j + 1] = temp; } } } p = head; //依次对结点赋值 for(int i = 0;i < count;i++){ p->val = valArr[i]; p = p->next; } return head; } };