题意:实现用链表写的插入排序
解法:注意每次进行“选择”那一步操作的时候,要先把当前这个点给独立出来,就是把前后的next都给割断
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class Solution {
public ListNode insertionSortList(ListNode head) {
ListNode hhead = new ListNode(-1);
hhead.next = head;
ListNode current = head, after, temp;
while (current != null) {
after = current.next;
temp = hhead;
while (temp.next != current)
temp = temp.next;
temp.next = null;
temp = hhead;
System.out.println("sorting : " + current.val);
while (temp.next != null && temp.next.val < current.val) {
temp = temp.next;
}
print(hhead);
if (temp.next != current) {
current.next = temp.next;
temp.next = current;
}
print(hhead);
temp = hhead;
while (temp.next != null) {
temp = temp.next;
}
temp.next = after;
current = after;
System.out.println();
System.out.println();
System.out.println();
}
return hhead.next;
}
public static void main(String[] args) {
Solution s = new Solution();
ListNode n1 = new ListNode(10);
ListNode n2 = new ListNode(9);
ListNode n3 = new ListNode(8);
ListNode n4 = new ListNode(12);
n1.next = n2;
n2.next = n3;
n3.next = n4;
// s.insertionSortList(n1);
print(s.insertionSortList(n1));
}
public static void print(ListNode head) {
System.out.println("print");
ListNode h = head;
int cnt = 0;
while (h != null && cnt < 10) {
System.out.print(h.val + " ");
cnt++;
h = h.next;
}
System.out.println();
System.out.println();
}
}