
bool insert_list函数while(。。。。)if(i>pos-1 || NULL==p)return false判断条件什么意思,可以图解吗
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedefstructNode{intdata;struct...
#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; 展开
#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; 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询