c语言怎么判断链表的节点数值是否相同?
c语言怎么判断链表的节点数值是否相同?定义的结构体中有一个成员是num,然后第一个节点输入数值,要在下一个节点输入时如果相同则显示错误,怎么实现?...
c语言怎么判断链表的节点数值是否相同?定义的结构体中有一个成员是num,然后第一个节点输入数值,要在下一个节点输入时 如果相同则显示错误,怎么实现?
展开
展开全部
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1
typedef struct NODE
{
int num;
struct NODE *next;
} Node,*Link;
int printLink(Link head) //屏幕打印链表
{
Link current;
int count=0;
if(head==NULL)
{
printf("\n链表还没有节点.\n");
}
else
{
current = head;
while(current!=NULL)
{
count++;
printf("%d ",current->num);
current=current->next;
}
}
return count;
}
int insertNode(Link *head,int value) //添加新节点
{
Link prev;
Link current;
Link newNode;
int isExist;
//情况1:链表还没有节点
if(*head==NULL)
{
newNode=(Node*)malloc(sizeof(Node));
if(newNode==NULL)
{
printf("\n分配动态内存时出错.\n");
return FALSE;
}
newNode->num=value;
newNode->next=NULL;
*head=newNode;
return TRUE;
}
//情况2:起码有1个节点
isExist=0;
current = *head;
prev=current;
while(current!=NULL) //遍历链表
{
if(current->num == value)
{
isExist=1; //有重复数值的节点
break;
}
prev=current;
current=current->next;
}
if(isExist==1)
{
printf("\n已经有相同数值(%d)的节点,不用添加.\n",value);
return FALSE;
}
newNode=(Node*)malloc(sizeof(Node));
if(newNode==NULL)
{
printf("\n分配动态内存时出错.\n");
return FALSE;
}
//在链表的末尾添加新记录
newNode->num=value;
newNode->next=NULL;
prev->next=newNode;
return TRUE;
}
int main()
{
Link head=NULL;
int nCount;
int value;
int result;
int total;
int i;
printf("要输入的节点总数量是:");
scanf("%d",&nCount);
printf("请输入%d个节点:",nCount);
for(i=0;i<nCount;i++)
{
scanf("%d",&value);
result=insertNode(&head,value);
}
//屏幕打印链表
printf("\n链表的节点有:");
total=printLink(head);
printf("\n一共有%d个节点\n",total);
printf("\n");
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询