剣指Offerの削除ソートチェーンテーブルの重複ノード


説明:
この問題は2種類のバージョンがあり、力ボタンと牛客は異なるバージョンで、まず力ボタンの上の簡単なバージョンを見ます.
タイトルの説明:
スナップショット:ソートチェーンテーブルを指定し、重複するすべての要素を削除して、各要素が1回しか表示されないようにします.
入力:1->1->2出力:1->2
重複する要素は1つしか残っていないことがわかります.
参照コード:
public ListNode deleteDuplicates(ListNode head) {
  if(head == null)return head;
  ListNode p = head;
  while(p != null && p.next != null){
     if(p.val == p.next.val)p.next = p.next.next;
     else p = p.next;
  }
  return head;
}

牛客網のちょっと難しい問題を見てみましょう.
タイトルの説明:
牛客:ソートされたチェーンテーブルに重複するノードがあります.チェーンテーブルの重複するノードを削除してください.重複するノードは保持されず、チェーンテーブルのヘッダーポインタに戻ります.例えば、チェーンテーブル1−>2−>3−>3−>4−>4−>5の処理後は1−>2−>5である
上記の問題との違いは、重複するノードがすべて削除されていることがわかります.
参照コード:
  public ListNode deleteDuplication(ListNode head){
     if(head == null)return head;
     
     //      
     ListNode v = new ListNode(-1);
     v.next = head;
     
     //  2     ,    
     ListNode curr = head;
     ListNode pre = v;
     
     //    
     while(curr != null){
     // if else    
       if(curr.next != null && curr.val == curr.next.val){
          curr = curr.next;
          while(curr.next != null && curr.val== curr.next.val){
            curr = curr.next;
          }
          curr = curr.next;//      curr
          pre.next = curr;//    
       }
       else{
          pre = curr;
          curr = curr.next;
       }
     }
     return v.next;
  }

まとめ
见ることができて、问题の1字の差、コードは多くなって、だから后で问题をするのはやはり先に问题の意味を明らかにして、更に解决します.
(完)