代码注释分析如下,希望对你理解有所帮助
// 单链表中 销毁链表操作是
void DestroyList(LinkNode* &List){
LinkNode* temp1=List,*temp2=List->next; //初始temp1指向头结点,temp2指向头结点的直接后继节点
while(temp2!=NULL){ //如果头结点的后继节点存在
free(temp1); //删除头结点
temp1=temp2; //temp1指向前面删除的头结点的后继节点,把它作为新的头结点
temp2=temp1->next; //temp2指向新的头结点的后继节点
}
free(temp1); //删除头结点,也是最后一个节点了
}
// 求链表长度操作是
int ListLength(LinkNode* List){
int n=0;
LinkNode* temp=List; //temp初始指向头结点,List始终指向链表的头结点
//这里如果list->next==NULL,即只有一个头结点,而没有数据节点,返回值会是0
while(temp->next!=NULL){ //这里初始temp->next指向第一个数据节点,如果为空,返回0;之后,如果temp当前指向的节点还有后继节点,则
//执行while循环体语句,否则退出循环。
n++;
temp=temp->next; //temp指向其当前所指向的节点的后继节点,即temp指向了其当前指向的节点的下一个节点
}
return (n);//返回值作为节点个数
}
这个是因为 你如果直接操作了List 下次就没法玩了
你把list移动到链表尾部的话,还怎么回到头结点
free时当然可以直接free本体啊
其他打印啊 求长度什么的都是给个头结点地址 用临时变量接过去用的