求大神帮帮忙给每个句子注释一下,给解释下
#include <stdio.h>#include <stdlib.h>
#include <windows.h>
typedef struct _node NODE;
struct _node{
int num;
NODE* next;
};
typedef struct _listnode LISTNODE;
struct _listnode{
NODE* listhead;
LISTNODE* next;
};
LISTNODE* root=NULL;
int chnum=0;
void add_listnode(LISTNODE *node){ //将新listnode链表节点加入链表
LISTNODE *p;
if(root==NULL){
root=node;
root->next=NULL;
}else{
for(p=root;p->next;p=p->next);
p->next=node;
node->next=NULL;
}
}
void add_node(NODE **head,NODE *node){ //将新node节点加入链表
NODE *p;
if(*head==NULL){
*head=node;
(*head)->next=NULL;
}else{
for(p=*head;p->next;p=p->next);
p->next=node;
node->next=NULL;
}
}
void print_list(NODE *head){ //打印链表
NODE* p;
for(p=head;p;p=p->next){
printf("%d ",p->num);
}
}
int count(NODE *head,int num){ //数链表中有多少个传入的num数
NODE *p;
int cnt=0;
for(p=head;p;p=p->next){
if(p->num==num)cnt++;
}
return cnt;
}
int condition_check(NODE *head){ //检查是否符合条件A
NODE *p;
int tmp;
for(p=head;p;p=p->next){
if(count(head,p->num)>1)return 0;
for(tmp=p->num;tmp>0;tmp>>=1){
if(tmp&1 && tmp>1)return 0;
}
}
return 1;
}
int check_all0(NODE *head){ //检查链表中的数是否全为0
NODE *p;
for(p=head;p;p=p->next){
if(p->num!=0)return 0;
}
return 1;
}
int count1(int num){ //检查数字的二进制形式中有几个1
int cnt;
for(cnt=0;num>0;num>>=1){
cnt+=num&1;
}
return cnt;
}
int countnum(NODE *head){ //数链表中有多少个数
int cnt=0;
NODE *p;
for(p=head;p;p=p->next){
cnt++;
}
return cnt;
}