链表插入时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);
}