数据结构线性表练习题之五

    xiaoxiao2023-10-31  158

    删除单链表中的重复元素

    代码实现

    #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define FLAG -1 //停止输入的标志 typedef struct Node { int data; struct Node * next; }LNode,*LinkList; void CreateLinkList(LinkList L); void show_List(LinkList L); void DeRepeatElemen(LinkList L); void main() { LinkList L; L = (LinkList)malloc(sizeof(LNode));//创建头结点 printf("创建单链表:\n"); CreateLinkList(L); printf("遍历单链表:\n"); show_List(L); DeRepeatElemen(L); printf("除去重复元素后的单链表:\n"); show_List(L); } void CreateLinkList(LinkList L) //尾插法 输出是输入的正序 { LinkList s,r; int x; scanf("%d",&x); r = L; while(x != FLAG) { s = (LNode *)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; scanf("%d",&x); } r->next = NULL; } void show_List(LinkList L) { LinkList p = L->next; printf("%d",p->data); p = p ->next; while(p != NULL) { printf("->%d",p->data); p = p->next; } printf("\n"); } void DeRepeatElemen(LinkList L) { //r用来标记已经除重的结点 LinkList r,p,q;//p q 用来删除重复结点 LinkList s;//用来释放 r = p = q = L->next; while(r) { p = q = r; p = p->next; while(p) { if(p->data == r->data) { p = p->next; s = q->next; q->next = p; free(s); } else { p = p->next; q = q->next; } } r = r->next; } }
    最新回复(0)