Solution:
In the previous post we already implement Insertion sort in arrays, now we deal of how to do it in single-linked lists.We summarize the difference:
- - Traversing a single-linked in the opposite direction is very costly.
- - We can add an element in any position without having to move the next elements.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode insertionSortList(ListNode head) { if(head==null) return null; ListNode nodeToInsert = head.next; while ( nodeToInsert != null) { ListNode nextToInsert = nodeToInsert.next; nodeToInsert.next = null; if(nodeToInsert.val<head.val) { nodeToInsert.next = head; if(head.next == nodeToInsert) head.next =null; head = nodeToInsert; } else { ListNode temp = head; while(temp.next!=null && temp.next.val< nodeToInsert.val) temp = temp.next; if(temp.next!=nodeToInsert) nodeToInsert.next = temp.next; temp.next = nodeToInsert; } nodeToInsert = nextToInsert; } return head; } }
No comments :
Post a Comment