删除非递减整数链表中重复元素(要求时间复杂度为O(n))
#include<stdio.h>
#include<stdlib.h>
typedef struct date{
int num;
struct date *next;
} LinkList;
LinkList *creat(int n){
LinkList *head, *node, *end;//定义头节点,普通节点,尾部节点;
head = (LinkList*)malloc(sizeof(LinkList));//分配地址
end = head; //若是空链表则头尾节点一样
for (int i = 0; i < n; i++) {
node = (LinkList*)malloc(sizeof(LinkList));
scanf("%d", &node->num);
end->next = node;
end = node;
}
end->next = NULL;//结束创建
return head;
}
int main()
{
int n;
printf("请输入元素个数n:");
scanf("%d",&n);
if(n<1)
{
printf("个数不能小于1!");
return 0;
}
printf("请输入这n个元素:");
LinkList *a = creat(n);
LinkList *p = a->next;
LinkList *q = p->next;
while(p->next!=NULL)
{
if(q==NULL) p->next= NULL;
else if(p->num==q->num) q=q->next;
else
{
p->next = q;
p=p->next;
q=q->next;
}
}
LinkList *t = a->next;
while(t!=NULL)
{
printf("%d ",t->num);
t = t->next;
}
}