首页
社区
课程
招聘
[原创]链表去重
发表于: 2019-11-12 17:49 2610

[原创]链表去重

2019-11-12 17:49
2610

链表去重主要是里用双指针(快慢指针)算法

#include <iostream>
#include <stdio.h>
#include <stdlib.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int size;
typedef struct no
{
    int data;
    no  *pnext;

}node;

typedef struct
{
    node head;
    node tail;
}lht;

void link_init(lht *p)
{
    p->head.pnext=&p->tail;
    p->tail.pnext=NULL;


}


int link_add(lht *p,int i)
{

      node *pf=NULL,*pm=NULL,*pl=NULL,*pn=NULL;
      pn=(node*)malloc(sizeof(node));
      if(pn==NULL)
      return 0;
      pf=&p->head;
      pm=pf->pnext;
      pl=pm->pnext;

    pf->pnext=pn;
      pn->pnext=pm;


    pn->data=i;
    size++;
    return 1;
}

void check_repeace(lht *p)
{
   node *pt,*pn=p->head.pnext,*pp=(node*)pn,*pp0=NULL;
while(pn!=&p->tail)//总遍历 
{    
    pp=pn;
    pt=pp->pnext;
    while(pt!=&p->tail)//哨兵 
    {              
    while(pt->data==pn->data&& pp!=&p->tail)//处理连续 
      {
        //pp->pnext=pt->pnext;// 下一个节点 
        //free(pt);
        //pt=pp->pnext;

          pp->pnext=pt->pnext;// 下一个节点 
        pp0=pt->pnext;
        free(pt);
        pt=pp0;


        size--;

        } 
         if(pt==&p->tail)
           {    
            pt->pnext= &p->tail;
           break;
           }
         pp=pp->pnext; 
        pt=pp->pnext;
      }
  pn=pn->pnext;

}

}



void link_show(const lht *p)
 {
     int i=1;
   const node *pn=p->head.pnext;

    while(pn!=&p->tail) 
    {
    printf("%d  ",pn->data);
         pn=pn->pnext;
     }
     i++;

     printf("\n");
 }


int main(int argc, char *argv[]) {
    lht ln={0};
    link_init(&ln);
    link_add(&ln,1);
    link_add(&ln,2);
    link_add(&ln,1);
    link_add(&ln,8);
    link_add(&ln,8);
    link_add(&ln,2);
    link_add(&ln,1);
    link_show(&ln);
       //Unique(&ln);
    check_repeace(&ln);
    link_show(&ln);

    return 0;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//