jiaxue4818
宇陳
采纳率100%
2019-10-12 14:39 浏览 624

链表插入时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条回答 默认 最新

  • 已采纳
    luoxueguihan luoxueguihan 2019-10-12 15:24

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

    点赞 1 评论 复制链接分享

相关推荐