一覧は提供56.削除複製ノードのリストを獲得します

タイトル説明

ソートされたリンクリストのノードが重複して、重複したノードのリストを削除し、ノードが繰り返さ保持していない、ヘッド・ポインタ・リストを返します。例えば、リスト4-> 5が処理され> 2-> 3-> 3-> 4-> 1- 1-> 2-> 5
 

再帰的なソリューション

 

公共ListNode deleteDuplication(ListNode PHEAD){ 

IF(PHEAD == NULL || pHead.next == NULL){ // のみ0またはノード、戻り 戻り、PHEAD } IF(pHead.val == PHEAD。 next.val){ // 現在のノードが重複したノードである ListNode•PNODE = pHead.next; しばらく!(•PNODE = ヌル && pNode.val == pHead.val){ // 同じ現在のノードのすべてに値をスキップノードは、異なる第1の電流接合ノードを見つけるために •PNODE = pNode.next; } 戻り deleteDuplication(•PNODE); // 再帰は異なる第1の電流接続ノードから始まり } { // 現在のノードが重複ノードない pHead.next = deleteDuplication(pHead.next); // 現在のノードを維持し、再帰は、次のノードから始まり 戻りPHEAD; }

 

 

 

多くの場合、解決策を行きます

 

まず、ヘッドノードは、同じ状況での最初の出会い、第2のノードを容易にするために添加されます

 

事前2.設定し、最後のポインタは、現在のノードへの事前のポインタは、最後のポインタのポインタと同等の仕事ながら、バック検索になっている、それを繰り返していないと判断されました。

 

公共ListNode deleteDuplication(ListNode PHEAD){ 

場合
(PHEAD == NULL || pHead.next == NULL){ 戻りPHEADを;} ListNodeヘッド = 新しい ListNode(0 )。 Head.next = PHEAD。 ListNode前 = ヘッド。 ListNode最後 = Head.next。 一方、(最後!= nullの){ 場合(last.next!= nullのを && last.val == last.next.val){ // 找到最后的一个相同节点 ながら(last.next!=ヌル && last.val == last.next.val){ 最後 = last.next。 } pre.next = last.next。 最後 = last.next。 } { 事前 = pre.next。 最後 = last.next。 } } 戻りHead.nextと、 }

 

おすすめ

転載: www.cnblogs.com/Transkai/p/11410721.html