景歳のLeetcode解題報告:147.Insertion Sort List (Java)


この問題はチェーンテーブルの挿入ソートを要求しており,チェーンテーブルの操作を簡単に考察する問題である.難点は、ソートされていないノードがソートされたノードを挿入する場合の3つの違いです.
1ソートされた部分の先頭ノードが挿入する値より大きい2ソートされた部分の最後のノードが挿入する値より小さい3の中間の場合:挿入する値がソートされた値の中間にある
次の手順は、ソートを挿入する内層サイクルで、上記の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){
                head=rh;
                head.next=lh;
            }
            else{
                temp1.next=rh;
                rh.next=lh;
            }
            
            // rh       temp2  rh.next
            rh=temp2;
        }
        
        return head;
    }
}