LeetCode - 83、並べ替えに繰り返し要素のリストを削除します

各要素は1回だけ発生するようにソートされたリストを考えると、すべての重複要素を削除します。

例1:

    入力:1 - > 1 - > 2
    出力:1 - > 2


例2:

    入力:1-> 1-> 2-> 3-> 3
    出力:1-> 2-> 3

1  / * 
2  *リストの定義
 3。 * {パブリッククラスListNode
 4。 * INTヴァル;
 5  * ListNode次に、
 図6  * ListNode(INT X){X =ヴァル;}
 。7  *}
 。8   * /

ソリューション:

1  クラスソリューション{
 2      公共ListNodeのdeleteDuplicates(ListNodeヘッド){
 3          // 去掉特殊情况
4          もし(ヘッド== NULL || head.next == NULL ){
 5              リターンヘッド。
6          }
 7          
8          ListNode PREV = head.next。
9          ListNode端= ヘッド。
10          
11          ながら(PREV!= NULL ){
 12              であれば(end.val == prev.val){
 13                  end.next = prev.next。
14                  PREV = end.next。
15              } {
 16                  PREV = prev.next。
17                  端= end.next。
18              }
 19          }
 20          
21          リターンヘッド。
22      }
 23 }
コードの表示

説明:入力元のリストが特別審査員に、空になることがあります。残りは単純なリストの削除です。

ソリューションの最適化:ちょうど一時変数を作成します

1  公共ListNodeのdeleteDuplicates(ListNodeヘッド){
 2      ListNode電流= ヘッド。
3      ながら(!電流= ヌル!&& current.next = NULL ){
 4          もし(current.next.val == current.val){
 5              current.next = current.next.next。
6          } {
 7              電流= current.next。
8          }
 9      }
 10      リターンヘッド。
11 }
コードの表示

最適化ソリューションII:野生のポインタを削除します

1  クラスソリューション{
 2      公共ListNodeのdeleteDuplicates(ListNodeヘッド){
 3          ListNodeのCUR = ヘッド。
4          一方(!CUR = ヌル!&& cur.next = NULL ){
 5              であれば(cur.val == cur.next.val){
 6                  ListNodeノード= cur.next。 
7                  cur.next = node.next。
8                  node.next = NULL ; // 清除野指针
9              } {
 10                  CUR =cur.next;          
11              }
 12              
13          }
 14          リターンヘッド。
15      }
 16 }
コードの表示

説明(パーソナル理解): ListNode = cur.nextノードと、次のポインタがまだガベージコレクションcur.next.next要素内のノードを指すは、Javaを回収することはできません

 

おすすめ

転載: www.cnblogs.com/dkccc/p/11425181.html