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

链表插入时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 2019-10-12 15:24
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题