Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
分析
对链表中的重复数据只保留一次。因此使用一个数组来保存数据,不过数组可能有之前运算遗留数据,需要注意搜索时候不要超过数组的长度。C代码如下,已通过。
对了其实链表是排好序的,直接依次遍历就行了。。。
int a[100000];
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
int length=0;
struct ListNode *p=head,*q=head;
if(p==NULL)return head;
a[length]=p->val;
length++;
p=p->next;
while(p!=NULL)
{
int j;
for(j=0;j<length;j++)
{
if(a[j]==p->val)
break;
}
//printf("%d %d %d\n",j,length,p->val);
if(j<length&&a[j]==p->val)
{
q->next=p->next;
p=p->next;
}
else
{
a[length]=p->val;
length++;
q=p;
p=p->next;
}
}
return head;
}
网友评论