各要素は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を回収することはできません