单链表排序,采用最简单的方法,建立一个数组,遍历链表,将每个结点的值存入数组,对数组排序,再将排序后的数组的值依次赋值给每个结点。完整代码如下。
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;
}
};
京公网安备 11010502036488号