链表去重操作-两种方法的实现
2016-11-13 15:31
417 查看
#include<stdio.h> #include<stdlib.h> typedef struct list { int data; list *next; }List; void create_list(list *&head,int len) { list *p=head; for(int i=0;i<len;i++) { list *pnew=(list*)malloc(sizeof(list)); scanf("%d",&pnew->data); p->next=pnew; p=p->next; } p->next=NULL; } void print_list(list *head) { while(head->next!=NULL) { head=head->next; printf("%d ",head->data); } } void delete_list(list *head,list *tail,list *newList) { list *o,*p,*q,*r=head,*t=newList; int l=0; for(p=head->next;p!=NULL;) { l=0; for(q=p->next;q!=NULL;q=q->next) { if(p->data==q->data) { l=1; o=p; r->next=p->next; p=p->next; free(o); break; } } if(!l) { r=p; p=p->next; } /*if(!l) { t->next=p; t=t->next; }*/ } t->next=NULL; } int main() { list l; int len; scanf("%d",&len); list *newList=(list *)malloc(sizeof(list)),*tail=(list *)malloc(sizeof(list)),*head=(list *)malloc(sizeof(list)); create_list(head,len); tail=head; delete_list(head,tail,newList); //print_list(newList); print_list(head); return 0; }一种是新建链表,另一种直接在原来链表进行删除
相关文章推荐
- 两种方法实现链表的节点操作排序
- 链表反转的两种实现方法
- 【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)
- 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值
- 两种方法实现约瑟夫环(链表,顺序表)
- 两种方法实现队满和队空的判断操作(循环队列)
- “js操作cookie” 与 “php操作cookie”,两种实现方法
- spring两种方法实现操作对象化
- Java判断链表是否有环的两种实现方法
- 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值
- 两种方法实现从尾到头打印链表--栈和递归
- 学习笔记之约瑟夫环的两种实现方法(数组&链表)
- C语言:链表的循环,两种思考方法,第一种用select_1()实现,第二种用select_2()实现.
- 用两种方法实现栈---顺序表和链表
- 链表反转的两种实现方法
- JAVA用JNI方法调用C代码实现HelloWorld(含windows及ubuntu两种操作系统环境下的操作)
- 链式顺序表-单链表的实现-------包括(单链表反转的两种方法)
- [Java]Java实现线程操作的两种方法
- 链表及其各种函数操作的实现方法
- 两种方法实现队列---顺序表和链表