链表插入时while(p)和while(p->Next)有何不同

#include "stdio.h"
#include "stdlib.h"
typedef struct List
{
int data;
struct List *Next;
}Node,*NodePtr;
NodePtr ListPtr;

void ListInsert(NodePtr L,int i)
{
NodePtr p;
NodePtr q;
p = L;
while(p) //在这里我用 while(p)的话程序就会卡死在这里,如果用while(p->Next)就可以正常运行,请问是为什么
{

p = p->Next;

}
q = (Node*)malloc(sizeof(Node));
q->data = i;

p->Next = q;
printf("111\n");
p=q;
p->Next = NULL;

}
void ListCreatTail(NodePtr L)
{
*L = (Node
)malloc(sizeof(Node));
(*L)->Next = NULL;
}

void ListDelete(NodePtr L, int i)
{
int j = 1;
NodePtr p,q;
p=L;
while(p,j < i)
{
p=p->Next;
++j;
}
q=p->Next;
p->Next = q->Next;
free(q);

}

void ListPrintf(NodePtr L)
{
NodePtr p;
p=L->Next;
while(p)
{
printf("%d\n",p->data);
p=p->Next;
}
}

void main()
{

ListCreatTail(&ListPtr);
ListInsert(ListPtr,1);
ListInsert(ListPtr,2);
ListInsert(ListPtr,3);
ListInsert(ListPtr,4);
ListInsert(ListPtr,5);
ListDelete(ListPtr,2);
ListPrintf(ListPtr);
}

1个回答

while(p)指的是当p!=NULL时执行while循环里面的语句,所以退出循环的时候p=NULL, 而你下面有一句p->next=q ,p已经等于NULL, 再用p->next就会出错

jiaxue4818
宇陳 谢谢 明白了 您看一下我这个创建方式是不是带头结点呢
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问