题意
给定一个无序单链表,实现单链表的选择排序(按升序排序)
题解
傻了啦叽地按照选择排序步骤,找到最小的元素后,插入到已经有序的链表的最后
耗时耗力,需要保存多个指针,而且还超时!!!
直接交换值即可,附上我傻了啦叽的代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
ListNode* sortInList(ListNode* head) {
ListNode* p, *pre, *minNode, *minNodePre;
ListNode* s = new ListNode(-1);
s->next = head;
while(s->next != nullptr){
pre = s;
p = s->next;
minNode = p;
minNodePre = p;
int min = p->val;
while(p != nullptr){
if(p->val < min){
minNode = p;
minNodePre = pre;
}
p = p->next;
pre = pre->next;
}
if(minNode != s->next){
minNodePre->next = minNode->next;
minNode->next = s->next;
s->next = minNode;
}
s = s->next;
}
return head;
}
};