Sort a linked list using selection sort.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode insertionSortList(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode oIter = dummy, iIter = head; // the last of the sorted element, the iter of the elements needed to be searched
while (oIter != null && oIter.next != null) {
iIter = oIter.next;
ListNode pre = oIter;
ListNode min = iIter, minPre = oIter;
while (iIter != null) {
if (iIter.val < min.val) {
min = iIter;
minPre = pre;
}
iIter = iIter.next;
pre = pre.next;
}
minPre.next = minPre.next.next;
ListNode tmp = oIter.next;
oIter.next = min;
min.next = tmp;
oIter = oIter.next;
}
return dummy.next;
}
}
Errors: 1. minPrxe.nex t = minPre.next.next; 写在了后面,导致当只剩一个元素时会把加到排好序的最后一个元素删掉。