LeetCode Remove Duplicates from Sorted List秩序チェーンテーブルの重複ノードを削除
3584 ワード
1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode *deleteDuplicates(ListNode *head) {
12 if(head==0) return 0;
13 ListNode *s,*e;
14 s=head; //s
15 e=head->next; //e
16 while(e){
17 if(e->val==s->val){
18 s->next=e->next;
19 delete(e);
20 e=s->next;
21 }
22 else{
23 s=s->next;
24 e=e->next;
25 }
26 }
27 return head;
28 }
29 };
問題:並べ替えられたチェーンテーブルを提供し、重複がある場合は重複を削除します(つまり、要素ごとに1回しか表示できません).
考え方:秩序が整っているので、削除するのは隣接するいくつかに違いありません.最初に出現した要素を保持し,2回目以上出現したものを削除する.2つのポインタ、1つは前の要素を指し、1つは後の要素を指します.一つ一つ判断して終わります.
注意:この問題は1つのポインタでも解決できます.もちろん、1つと2つのメモリの違いは大きくありません.2つのポインタで比較的直感的に使用します.