ソートされたリンク リストの先頭を指定して head
、 元のリンク リスト内の重複する番号を持つすべてのノードを削除し、異なる番号だけを残します 。ソートされたリンクリストを返します 。
アイデア 1: 質問の意味をシミュレートする
struct ListNode* deleteDuplicates(struct ListNode* head){
if (head == NULL || head->next == NULL) return head;
struct ListNode nhead = {NULL, 0};
struct ListNode* p1 = head;
struct ListNode* p2 = &nhead;
int n,value;
while (p1) {
struct ListNode* tmp = p1;
for (n = 0,value = p1->val; p1 != NULL && p1->val == value; ++n)
p1 = p1->next;
if (n == 1) {
p2->next = tmp;
p2 = tmp;
}
}
p2->next = NULL;
return nhead.next;
}
分析します:
この質問では、重複する要素はすべて削除されます。新しいリンク リストを作成することを検討できます。重複する要素がある場合は、新しいリンク リストには入れず、最終的に新しいリンク リストを出力します。リンク リスト操作では、元の位置を記録するために別のリンク リストを使用する必要があります。n==1 の場合、p2 が tmp を指すようにし、最後に nhead を出力します。
要約:
この質問は、リンクされたリストの削除操作を調べます。つまり、要素が繰り返されているかどうかを判断し、繰り返されている場合は新しいリンクされたリストに追加されず、最終的に返されます。