题目描述
给定一个无序单链表,实现单链表的选择排序(按升序排序)。
示例1
输入
[1,3,2,4,5]
输出
{1,2,3,4,5}
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类 the head node
* @return ListNode类
* 链表排序 只需要改变链表节点中的val进行替换即可 不用原有链表节点移动
*/
public ListNode sortInList (ListNode head) {
if(head == null){
return head;
}
ListNode curNode = head;
//记录当前链表节点的最小值
int temp;
while(curNode!=null){
//当前节点的下一个节点,因为要从当前节点的后一节点开始 循环遍历出小于temp的 然后和首位置节点的val交换
/**
* 内重循环从当前节点的下一个节点循环到尾节点,
* 找到和外重循环的值比较最小的那个,然后与外重循环进行交换
*/
ListNode nextNode = curNode.next;
//从nextNode节点开始循环遍历出 后续节点中最小的那个节点的val
while(nextNode!=null){
//每次循环以curNode的val作为链表最小值进行比较
if(curNode.val > nextNode.val){
temp = curNode.val;
curNode.val = nextNode.val;
nextNode.val = temp;
}
nextNode = nextNode.next;
}
curNode = curNode.next;
}
return head;
}
}