|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*
1212121
先拿第一个元素与后面的元素做对比,如果相同就释放相同的元素,如果不相同,就找下一个元素作对比
当对比完所有的元素之后,在拿第二个元素做对比,依次类推。最后输出元素
*/
//# include <stdafx.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef int ElemType;
typedef struct Node
{
ElemType Elem;
Node *next;
}Node;
void InitList(Node **pHead) //初始化链表
{
*pHead = NULL;
printf("链表初始化完毕\n");
}
Node *CreateList(Node *pHead)//创建链表
{
Node *p1,*p2; //p1指向头结点,p2指向尾结点
p1 = p2 = (Node *)malloc(sizeof(Node));//申请结点
if(p1 == NULL || p2 == NULL)
{
printf("链表创建失败\n");
exit(0);
}
memset(p1,0,sizeof(Node)); //改变p1的指向,使P1指向新的内存空间
scanf("%d",&p1->Elem); //输入元素
p1->next = NULL; //新节点的指针置为空
while(p1->Elem > 0)
{
if(pHead == NULL)
pHead = p1;
else p2->next = p1;//如果为空表,则直接接入,否则放到表尾,也就是最后一个元素的后面
p2 = p1;//把元素变为最后一个元素
p1 = (Node *)malloc(sizeof(Node));//申请新节点
if(p1 == NULL || p2 == NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1,0,sizeof(Node));
scanf("%d",&p1->Elem);
p1->next = NULL;
}
printf("链表创建成功\n");
return pHead;
}
void PrintList(Node *pHead)
{
if(pHead == NULL)
{
printf("链表为空\n");
exit(0);
}
while(pHead != NULL)
{
printf("%d",pHead->Elem);
pHead = pHead->next;
}
printf("\n");
}
void CompareList(Node *pHead)//删除重复的元素
{
Node *p2,*pNext;
while(pHead != NULL)
{
p2 = pHead->next;
while(pHead != NULL)
{
if(pHead->Elem == p2->Elem)
{
pNext = p2->next;
free(p2);
p2 = pNext;
}
}
pHead = pHead->next;
}
return;
}
void clearList(Node *pHead)
{
Node *pNext; //定义一个与pHead相邻节点
if(pHead == NULL)
{
printf("clearList函数执行,链表为空\n");
return;
}
while(pHead->next != NULL)
{
pNext = pHead->next;//保存下一结点的指针
free(pHead);
pHead = pNext; //表头下移
}
printf("clearList函数执行,链表已经清除\n");
}
int main()
{
Node *pList;
InitList(&pList);
pList = CreateList(pList);
PrintList(pList);
CompareList(pList);
PrintList(pList);
clearList(pList);
return 0;
}
就是判断重复函数那里有问题CompareList,希望能看下到底哪里的问题。出现的问题如图
|
|