-
-
[原创]链表去重
-
发表于: 2019-11-12 17:49 2613
-
链表去重主要是里用双指针(快慢指针)算法
#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; }
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [原创]明白结构体这样传为什么会有三份数据咯 5716
- [原创]大哥姐姐们,我回来了 10877
- [讨论]我忘了参加360校招的笔试,怎么办??? 3908
- [求助]要实习了,有没有大佬帮我推到360?可以接受9 0 7 4672
- [原创]导入表注入实现修改消息回调函数(简单勿喷) 3301
看原图
赞赏
雪币:
留言: