bool insert_list函数while(。。。。)if(i>pos-1 || NULL==p)return false判断条件什么意思,可以图解吗

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct Node
{
int data;
struct Node* pNext;//pNext指向的是和它本身的数据类型一样的节点
}*PNODE,NODE;//NODE等价于struct Node,*PNODE等价于struct Node*
bool insert_list(PNODE pHead,int ,int );//第一个int表示的是在链表中插入的位置,第二个int表示的是插入的具体数值
int main(void)
{
PNODE pHead=NULL;//等价于struct Node* pHead=NULL
pHead=create_list();//creat_list()的功能是创建一个非循环单链表,并将该链表的第一个指针付给pHead
traverse_list(pHead);

int val;
insert_list(pHead,1,1000);
return 0;
}
PNODE create_list(void)//这个函数的返回值是struct Node结构体的一个指针
{
int len;//用来存放有效节点的个数
int i;//输入的次数
int val;//用来临时存放用户输入的节点的值
//分配一个不存放有效数据的头结点
PNODE pHead=(PNODE)malloc(sizeof(NODE));//生成一个临时节点
if(NULL==pHead)
{
printf("分配失败,程序终止!\n");
exit(-1);
}

PNODE pTail=pHead;//pTail和pHead都指向了头结点
pTail->pNext=NULL;//吧pTail的指针域清空,导致pTail永远指向尾节点

printf("请输入您要输入的链表节点的个数:len=");
scanf("%d",&len);
for(i=0;i<len;++i)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);

PNODE pNew =(PNODE)malloc(sizeof(NODE));//用pNew造出一个新的节点
if(NULL==pNew)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
pNew->data=val;//把指针域放对应的数据放进去
pTail->pNext=pNew;//用pTail->pNext指向的下一个节点等于pNew
pNew->pNext=NULL;//把最后一个的pNext符为空,方便在下一步让pTail=pNew让pTail后移一位;
pTail=pNew;//相当于把pTail向后移一位到达pNew原来的的位置,这时又变成了pTail又变成尾节点,pTail->next为NULL
}//链表生成了
return pHead;//返回头指针给主函数中
}
//链表的节点插入,在pHead所指向链表的第pos个节点前插入val
bool insert_list(PNODE pHead,int pos,int val)
{
int i=0;
PNODE p=pHead;

while(NULL!=p && i<pos-1)
{
p=p->pNext;
++i;
}
if(i>pos-1 || NULL==p)
return false;

PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(NULL==pNew)
{
printf("动态内存分配失败!\n");
exit(-1);
}
pNew->data=val;
PNODE q=p->pNext;
p->pNext=pNew;
pNew->pNext=q;

return trun;

//链表的节点插入,在pHead所指向链表的第pos个节点前插入val
比如说链表节点 1、2、3。要在第3个节点前插入新节点。

那么做法就是,让2指向新节点。新节点指向3。

所以

while(NULL!=p && i<pos-1) //(1)

的目的就是找到pos的前一个节点。

if(i>pos-1 || NULL==p) //(2)

这个判断条件是保证输入的pos有效。从(1)循环跳出来,顺利找到第pos-1节点的结果是

(i==pos-1 && p!=NULL) //(3) 字面义:找到i=pos-1节点,并且不为空

(2)实际上就是(3)的真值取反。

 

图解(假设pos=3):

温馨提示:答案为网友推荐,仅供参考
相似回答