用单链表实现插入排序
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/
相关文章推荐
- 数据结构 29 排序 自己实现 插入排序 插入和归并综合排序 给链表排序
- JavaScript实现链表插入排序和链表归并排序
- 用指针实现链表--插入排序
- C语言用链表实现插入排序
- 单链表实现插入排序
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 单链表实现排序算法之插入排序
- 《Java数据结构与算法》笔记-CH5-链表-7实现链表的插入排序
- 用链表实现插入排序
- JavaScript实现链表插入排序和链表归并排序
- Linux实现插入排序的双向链表
- 排序法系列之二----插入排序(直接插入,希尔排序,二分插入,链表插入排序)的C++代码实现
- 链表实现插入排序
- 在单链表上实现插入排序
- Linux实现插入排序的双向链表
- C_线性表(ADT)-单向循环链表的表示和实现
- 数据结构 排序(冒泡排序改进,简单选择排序链表实现)
- python3实现单向链表
- java实现输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 【c语言】冒泡排序与插入排序的实现