タイトル説明
ソートされたリンクリストのノードが重複して、重複したノードのリストを削除し、ノードが繰り返さ保持していない、ヘッド・ポインタ・リストを返します。例えば、リスト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と、
}