景岁的Leetcode解题报告:147.Insertion Sort List (Java)
2014-11-12 12:07
591 查看
这道题要求的是对链表进行插入排序,算是一道简单的考察链表操作的题目。其中的难点在于未排序节点插入已排序节点时的三种不同情况:
1已排序部分头结点就大于要插入值 2已排序部分最后一节点还小于要插入值 3中间情况:要插入值在已排序值中间
下面的程序在插入排序的内层循环中,对上面三种情况进行分别处理:
1已排序部分头结点就大于要插入值 2已排序部分最后一节点还小于要插入值 3中间情况:要插入值在已排序值中间
下面的程序在插入排序的内层循环中,对上面三种情况进行分别处理:
/** * 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||head.next==null){ //有了这步,以后只考虑最少两个节点的情况即可 return head; } ListNode lh=head; ListNode rh=head.next; head.next=null; ListNode temp1=null; ListNode temp2=null; //外围循环 while(rh!=null){ lh=head; //内层循环 while(lh.val<rh.val&&lh!=null&&lh.next!=null){ temp1=lh; lh=lh.next; } //保存现在rh.next的值,因为一会rh指针会指向别处 temp2=rh.next; //对内层while语句中三种不满足条件的情况分别进行处理:1已排序最后一位还小于要插入值 2头结点就大于要插入值 3要插入值在已排序值中间 if(lh.next==null&&lh.val<rh.val){ lh.next=rh; rh.next=null; } else if(head.val>=rh.val){ head=rh; head.next=lh; } else{ temp1.next=rh; rh.next=lh; } //将rh置为刚才保存在temp2中的rh.next rh=temp2; } return head; } }
相关文章推荐
- LeetCode: Insertion Sort List 解题报告
- LeetCode—Insertion Sort List 解题报告
- leetCode解题报告之Insertion Sort List
- leetcode 148. Sort List 解题报告
- LeetCode: Sort List 解题报告
- Leetcode Insertion Sort List 解题报告
- leetCode解题报告之Sort List
- [Leetcode] 147. Insertion Sort List 解题报告
- [leetcode]19. Remove Nth Node From End of List@Java解题报告
- Leetcode Insertion Sort List 解题报告
- [LeetCode]Sort List,解题报告
- 【LeetCode】Reverse Linked List 解题报告(Python & java)
- LeetCode解题报告—— Rotate List & Set Matrix Zeroes & Sort Colors
- 【LeetCode】Sort List 解题报告(对链表进行归并排序)
- LeetCode—Sort List解题报告
- LeetCode 148. Sort List 解题报告(归并排序小结)
- [leetcode] 147. Insertion Sort List 解题报告
- [leetcode]61. Rotate List@Java解题报告
- leetcode解题之148. Sort List Java版(对链表排序)
- JAVA学习44_leetCode解题报告之Copy List with Random Pointer