https://leetcode.cn/problems/remove-duplicate-node-lcci/
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
ListNode* removeDuplicateNodes(ListNode* head) {
char flag[20001] = {0};
if(head == NULL)
return head;
ListNode *p = head;
flag[head->val] = 1;//标记头节点
while(p->next)
{
ListNode *cur = p->next;//记录待删除节点
if(flag[cur->val]==0)//未出现重复节点
{
flag[cur->val] = 1;//标记
p=p->next;
}
else
{
if(cur->next)
p->next=cur->next;//出现重复节点,忽略
else
break;
}
}
p->next = NULL;
return head;
}
进阶:
如果不得使用临时缓冲区,该怎么解决?
struct ListNode* removeDuplicateNodes(struct ListNode* head) {
if (head == NULL)
return head;
struct ListNode *cur=head;
//双指针逐个比较
while(cur)
{
struct ListNode *p = cur;
while(p->next)
{
if(p->next->val == cur->val)
p->next=p->next->next;
else
p=p->next;
}
cur = cur->next;
}
return head;
}