标题: C++语言链表删除重复结点 [打印本页]

作者: daming    时间: 2014-12-30 01:54
标题: C++语言链表删除重复结点
本帖最后由 daming 于 2014-12-30 02:14 编辑


  1. #include<iostream.h>
  2. struct link
  3. {
  4. int data;
  5. link *next;
  6. };

  7. link *rcreat()          //尾插法建立单链表
  8. {
  9. link *s,*p,*r; int i;
  10. p=r=new link; p->next=NULL;
  11. cin>>i;
  12. while(i){
  13.   s=new link; s->data=i;
  14.   r->next=s;
  15.   r=s;
  16.   cin>>i;
  17. }
  18. r->next=NULL;
  19. return p;
  20. }

  21. void print(link *head)  //输出
  22. {
  23. link *p;
  24. p=head->next;
  25. while(p->next!=NULL){
  26.   cout<<p->data<<"  ";
  27.   p=p->next;}
  28. cout<<p->data<<endl;
  29. }

  30. void del(link *head ) // 删除重复的结点
  31. {
  32. link *s,*p,*q;

  33. s=head->next;
  34. while(s!=NULL){
  35.       p=s;
  36.      q=p->next;
  37.      while(1){
  38.       if(q==NULL)
  39.        break;
  40.       if(q->data!=s->data)
  41.    {
  42.              p=q; q=q->next;
  43.    }
  44.       else{
  45.              p->next=q->next;
  46.              delete q;
  47.              q=p->next;
  48.    }
  49.   }
  50.   s=s->next;
  51. }
  52. }



  53. void main()
  54. {
  55. link *p;
  56. p=rcreat();
  57. del(p);
  58. print(p);
  59. }
复制代码







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1