题解 | #删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ struct ListNode* deleteDuplicates(struct ListNode* head ) { // write code here if(head == NULL) //当链表为空时 { return NULL; } int a[100] = {0}; //存储链表中不同元素的值 int n = 0; //记录数组中元素个数 int flag; //标识符,用来判断是否进行了删除操作 struct ListNode* traversal = head; //遍历指针 struct ListNode* front = head; //保存要删除元素的前驱结点 while(traversal) { flag = 0; if(traversal == head) //遍历指针为头结点时 { a[n++] = traversal->val; } else { int j; for(j=0;j<n;j++) //遍历数组中的元素 { if(traversal->val == a[j]) //找到重复元素 { if(traversal->next == NULL) //删除元素为尾结点 { front->next = NULL; free(traversal); return head; } else //删除元素为中间结点 { front->next = traversal->next; free(traversal); traversal = front->next; flag = 1; break; } } } if(j == n) //当数组自然退出时 { a[n++] = traversal->val; } } if(flag == 0) //链表没进行删除操作时 { front = traversal; traversal = traversal->next; } } return head; }