您的位置:首页 > 其它

用单链表实现插入排序

2014-04-19 18:01 387 查看
package com.algorithm.sort;

class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
next = null;
}
}

public class SortLinkedList {
public static ListNode insertionSortList(ListNode head) {

if (head == null || head.next == null)
return head;

ListNode newHead = new ListNode(head.val);
ListNode pointer = head.next;

// loop through each element in the list
while (pointer != null) {
// insert this element to the new list

ListNode innerPointer = newHead;
ListNode next = pointer.next;

if (pointer.val <= newHead.val) {
ListNode oldHead = newHead;
newHead = pointer;
newHead.next = oldHead;
} else {
while (innerPointer.next != null) {

if (pointer.val > innerPointer.val
&& pointer.val <= innerPointer.next.val) {
ListNode oldNext = innerPointer.next;
innerPointer.next = pointer;
pointer.next = oldNext;
}

innerPointer = innerPointer.next;
}

if (innerPointer.next == null && pointer.val > innerPointer.val) {
innerPointer.next = pointer;
pointer.next = null;
}
}

// finally
pointer = next;
}

return newHead;
}

public static void main(String[] args) {
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);
ListNode n9 = new ListNode(8);

n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = n6;
n6.next = n7;
n7.next = n8;
n8.next = n9;

n1 = insertionSortList(n1);

printList(n1);

}

public static void printList(ListNode x) {
if (x != null) {
System.out.print(x.val + " ");
while (x.next != null) {
System.out.print(x.next.val + " ");
x = x.next;
}
System.out.println();
}

}
}


执行后:

1 2 3 4 5 6 7 8 9

转载地址:http://www.programcreek.com/2012/11/leetcode-solution-sort-a-linked-list-using-insertion-sort-in-java/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: