为什么链表的最后一个(尾节点)如果没有rear->next=NULL;这个链表就会错呢?

本文深入解析单向链表构建中的常见错误——最后一个节点未正确指向。详细说明了为何此错误会导致链表构建不完全,甚至引发无限循环的问题。强调在链表构造时,最后一个节点应指向头结点形成循环链表,或指向NULL终止链表的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我来告诉你为什么!
这个错误你已近犯了很多次,告诉你以后就不要在犯错了
如果在单向链表中,最后一个节点没有明确的指向的话
计算机既认为这个链表是没有建立完全的,它是不会停止的。
所以我们在建造链表时一定要牢记,最后一个节点一定要有所指向
是头结点形成循环链表也好,指向一个NULL值也好。
总而言之是不可以空着的!
记住了!

#include<stdio.h> #include<stdlib.h> typedef struct qnode { ElemType data; //数据元素 struct qnode *next; } QNode; typedef struct { QNode *front; //指向单链表队头节点 QNode *rear; //指向单链表节点 } LiQueue; void InitQueue(LiQueue *&q) { q=(LiQueue *)malloc(sizeof(LiQueue)); q->front=q->rear=NULL; } void DestroyQueue(LiQueue *&q) { QNode *p=q->front,*r; //p指向队头数据节点 if (p!=NULL) //释放数据节点占用空间 { r=p->next; while (r!=NULL) { free(p); p=r;r=p->next; } } free(p); free(q); //释放链队节点占用空间 } int QueueEmpty(LiQueue *q) {   return(q->rear==NULL); } void enQueue(LiQueue *&q,ElemType e) { QNode *p; p=(QNode *)malloc(sizeof(QNode)); p->data=e; p->next=NULL; if (q->rear==NULL) //若链队为空,新节点是队首节点又是队节点 q->front=q->rear=p; else { q->rear->next=p;//将*p节点链到队,并将rear指向它 q->rear=p; } } int deQueue(LiQueue *&q,ElemType &e) { QNode *t; if (q->rear==NULL) return false; //队列为空 t=q->front; //t指向第一个数据节点 if (q->front==q->rear) //队列中只有一个节点时 q->front=q->rear=NULL; else //队列中有多个节点时 q->front=q->front->next; e=t->data; free(t); return true; } void initQueue(LinkList *&rear) //初始化队运算算法 {   rear=NULL; } int queueEmpty(LinkList *rear) //判队空运算算法 { return(rear==NULL); } void enQueue(LinkList *&rear,ElemType x) //进队运算算法 { LinkList *p; p=(LinkList *)malloc(sizeof(LinkList));//创建新节点 p->data=x; if (rear==NULL) //原链队为空 { p->next=p; //构成循环链表 rear=p; } else { p->next=rear->next;//将*p节点插入到*rear节点之后 rear->next=p; rear=p; //让rear指向这个新插入的节点 } } int deQueue(LinkList *&rear,ElemType &x) //出队运算算法 { LinkList *q; if (rear==NULL) return false; //队空 else if (rear->next==rear) //原队中只有一个节点 { x=rear->data; free(rear); rear=NULL; } else //原队中有两个或以上的节点 { q=rear->next; x=q->data; rear->next=q->next; free(q); } return true; } 扩充代码使之完整,并写出完整代码
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值