题目描述:Sort a linked list using insertion sort.
代码实现;
package leetcoder;
class ListNode {
int val;
ListNode next;
public ListNode head1;
ListNode(int x) {
val = x;
next = null;
}
}
public class LinkedListInsert {
public static ListNode insertionSortList(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode h1, h2, h3;
ListNode head1 = new ListNode(0);
head1.next = head;
for (h3 = head1, h2 = head1.next; h2 != null;) {// h2用来指向需要插入的结点,h3指向h2的前一个结点
h1 = head1;// h1用来遍历寻找合适的插入位置
for (; h1 != h2; h1 = h1.next) {
if (h1.next.val > h2.val) {
h3.next = h2.next;
h2.next = h1.next;
h1.next = h2;
h2 = h3.next;
break;
}
}
if (h1 == h2) {// 不需要前插时
h2 = h2.next;
h3 = h3.next;
}
}
//head1.next = null;
return head1.next;
}
public static void main(String[] args) {
//ListNode n = new ListNode(0);
ListNode n1 = new ListNode(3);
ListNode n2 = new ListNode(7);
ListNode n3 = new ListNode(4);
ListNode n4 = new ListNode(9);
ListNode n5 = new ListNode(5);
ListNode n6 = new ListNode(2);
ListNode n7 = new ListNode(6);
ListNode n8 = new ListNode(1);
//n.next = n1;
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = n6;
n6.next = n7;
n7.next = n8;
n8.next = null;
//
// ListNode n1 = new ListNode(1);
// ListNode n2 = new ListNode(1);
// n.next = n1;
// n1.next = n2;
// n2.next = null;
ListNode ll = insertionSortList(n1);
while (ll != null) {
System.out.println(ll.val);
ll = ll.next;
}
}
}