Delete Duplicate

Description
已知线性表中的元素以递增有序排列,并以单链表作存储结构。试写一个高效的算法,删除表中所有冗余的结点,即数据域相同的结点只保留一个。

例如对链表:

进行操作,将得到:

链表结点定义如下:

struct LinkNode {
    int data;

    LinkNode *next;

    LinkNode(int d, LinkNode *add_on = NULL) {

             data = d;

             next = add_on;

    }

};

typedef LinkNode *LinkList;

请实现函数:

void delete_duplicate(LinkList &head);

注意内存的回收。

Hint
只需提交delete_duplicate() 函数

Problem Source: SYSU ACM/ICPC Team

zhc:

//删除重复节点
/*由于原while循环里的p!=NULL 只在head==NULL时有用,故前两行可换成以下代码,
行数+1,while比较次数每次-1,so nice!
if(head==NULL || head->next ==NULL)  return ;
   LinkList p = head ;
   while(p->next!=NULL){
/*
void delete_duplicate(LinkList &head){
    LinkList p = head;
    while(p!=NULL&& p->next!=NULL){
        if(p->data == p->next->data){
        LinkList temp = p->next;
        p->next = temp->next ;
        delete temp ;
    }
        else p=p->next ;
    }
}

Yizuodi的答案

void delete_duplicate(LinkList &head){
 LinkList p = head;
 while(p!=NULL&& p->next!=NULL){
  if(p->data == p->next->data){
   LinkList temp = p->next;
   p->next = temp->next ;
         delete temp ;
  }
        else p=p->next ;
 }
}
支持 makedown语法