题目如下
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct listnode)
typedef struct listnode{
int data;
struct listnode *next;
}listnode,*linklist;
int main()
{
linklist creat(),deleteduplicates(linklist head),a,b;
printf("ÇëÊäÈëÁ´±íµÄÖµ£º");
a=creat();
b=deleteduplicates(a);
printf("The answer is:");
while(b)
{
printf("%d",b->data);
b=b->next;
}
return 0;
}
linklist deleteduplicates(linklist head)
{
linklist dummy = (linklist)malloc(sizeof(LEN));
dummy->next = head;
linklist cur = dummy;
while (cur->next != NULL && cur->next->next != NULL) {
if (cur->next->data == cur->next->next->data) {
linklist temp = cur->next;
while (temp !=NULL && temp->next != NULL && temp->data == temp->next->data ) {
temp = temp->next;
}
cur->next = temp->next;
}
else
cur = cur->next;
}
return dummy->next;
}
linklist creat(linklist L)
{
linklist s,r;
int x;
L=(linklist)malloc(sizeof(LEN));
r=L;
scanf("%d",&x);
while(x!=9999)
{
s=(linklist)malloc(sizeof(LEN));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L->next;
}