题解 | #删除有序链表中重复的元素-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;
}

查看25道真题和解析