题目描述
给定一个无序单链表,实现单链表的选择排序(按升序排序)。
输入描述:
第一行一个整数 n,表示单链表的节点数量。
第二行 n 个整数 val 表示单链表的各个节点。
输出描述:
在给出的函数内返回给定链表的头指针。
示例1
输入
5
1 3 2 4 5
输出
1 2 3 4 5
解法一:选择排序
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int len = Integer.parseInt(br.readLine());
String[] ss = br.readLine().trim().split(" ");
ListNode head = new ListNode(-1);
for(int i=len-1;i>=0;i--){
ListNode node = new ListNode(Integer.parseInt(ss[i]));
node.next = head.next;
head.next = node;
}
head = sort(head.next);
StringBuilder sb = new StringBuilder();
while(head!=null){
sb.append(head.val+" ");
head = head.next;
}
System.out.println(sb.toString().trim());
}
public static ListNode sort(ListNode head){
if(head==null||head.next==null) return head;
ListNode root = new ListNode(-1);
root.next = head;
ListNode newroot = new ListNode(-1);
ListNode r = newroot;
while(root.next!=null){
ListNode premin = root;
ListNode pre = root;
while(pre.next!=null){
if(pre.next.val<premin.next.val){
premin = pre;
}
pre = pre.next;
}
r.next = premin.next;
r = premin.next;
premin.next = premin.next.next;
r.next = null;
}
return newroot.next;
}
}
class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}