[LeetCode Interview Question 02.04]リンクリストを分割し、xに基づいてリンクリストを分割するプログラムを作成し、x未満のすべてのノードがx以上のノードの前に配置されるようにします。

学習目標:

目標:Javaで学んだ知識を上手に活用する


学習内容:

この記事の内容:Javaで実装:リンクリストの分割


タイトル説明:

xに基づいてリンクリストを分割するプログラムを作成し、x未満のすべてのノードがx以上のノードの前にランク付けされるようにします。リンクリストにxが含まれている場合、xはx未満の要素の後にのみ表示する必要があります(以下を参照)。分割要素xは「右半分」にある必要があり、左右の部分の間に配置する必要はありません。

例:

入力:ヘッド= 3-> 5-> 8-> 5-> 10-> 2-> 1、x = 5
出力:3-> 1-> 2-> 10-> 5-> 5-> 8

問題解決のアイデア

2つの新しいリンクリストを作成します。1つは指定された値よりも小さいノードを格納し、もう1つは指定された値よりも大きいノードを格納し、最後に2つのリンクリストを接続します。

  • まず、リンクリストが空で、ノードが1つしかない状況を特定します。
if(head==null)return null;//为空链表
if(head.next==null) return head;//只有一个节点
  • 2つの新しいリンクリストを作成します
ListNode min =new ListNode(0);//创建小于给定值的链表
       ListNode minTail=min;
       ListNode max=new ListNode(0);//创建大于给定值的链表
       ListNode maxTail=max;
       ListNode cur=head;
  • 循環比較により、対応するノードは対応するリンクリストに保存され、リンクリストは一緒にスプライスされます
   //比较链表节点与给定值并存入相应链表
       while(cur!=null){
    
    
           if(cur.val<x){
    
    
               minTail.next=new ListNode(cur.val);//后插入链表
               minTail=minTail.next;
           }else{
    
    
               maxTail.next=new ListNode(cur.val);//后插入链表
               maxTail=maxTail.next;
           }

           cur=cur.next;
       }
       minTail.next=max.next;//将两个链表拼接起来

実装コード

  public static ListNode partition(ListNode head, int x) {
    
    
        if(head==null)return null;//为空链表
        if(head.next==null) return head;//只有一个节点
        ListNode min =new ListNode(0);//创建小于给定值的链表
        ListNode minTail=min;
        ListNode max=new ListNode(0);//创建大于给定值的链表
        ListNode maxTail=max;
        ListNode cur=head;
        //比较链表节点与给定值并存入相应链表
        while(cur!=null){
    
    
            if(cur.val<x){
    
    
                minTail.next=new ListNode(cur.val);//后插入链表
                minTail=minTail.next;
            }else{
    
    
                maxTail.next=new ListNode(cur.val);//后插入链表
                maxTail=maxTail.next;
            }

            cur=cur.next;
        }
        minTail.next=max.next;//将两个链表拼接起来
        return min.next;
    }

おすすめ

転載: blog.csdn.net/zhangxxin/article/details/114504059