//这是删除链表中重复元素的函数
struct ListNode *head{
int val;
struct ListNode *next;
};
struct ListNode *deleteDuplicates(struct ListNode *head)
{
struct ListNode *t, *r, *p;
p = head->next;
while(p != NULL)
{
t = p;
while(t->next != NULL)
{
r = t;
t = t->next;
if(t->val == p->val)
{
r->next = t->next;
free(t);
t = r;
}
}
p = p->next;
}
return head;
}
/
//创建链表,实现尾部插入
struct ListNode *ListTail_Insert(void)
{
struct ListNode *t, *r, *p;
int val;
t = (struct ListNode *)malloc(sizeof(struct ListNode));
t->next = NULL;
r = t;
while(scanf("%d", &val) != EOF) //EOF 在Linux下面是 ctrl+d
{
p = (struct ListNode *)malloc(sizeof(struct ListNode));
p->val = val;
r->next = p;
r = p;
}
r->next = NULL;
return T;
}
int main(void)
{
struct ListNode *head = NULL;
struct ListNode *tt = NULL;
head = ListTail_Insert();
tt = deleteDuplicates(head);
tt = head->next;
while(tt != NULL)
{
printf("%d \n", tt->val);
tt = tt->next;
}
return 0;
}
上面的deleteDuplicates()函数在LeetCode刷题中是通不过的,不过代码我在Linux下面跑的时候是没有问题的,具体我也不知道是什么原因