各位帮我看看,我从链表尾插入数据,怎么没有插入进去.

Gengoo 2008-04-19 02:31:54


//插入结点到链表尾
int PNode::InsertEndNode(int value)
{
CNode *curNode = NULL;
CNode *tailNode = new CNode;
tailNode->nNode = value;

if (pHeadNode == NULL)
{
pHeadNode = new CNode;
pHeadNode = tailNode;
pHeadNode->pNext = NULL;
}
else
{
curNode = pHeadNode;
while (curNode)
{
curNode = curNode->pNext;
}

tailNode->pNext = curNode;
curNode = tailNode;
}
return 0;
}

...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OenAuth.Core 2008-04-19
  • 打赏
  • 举报
回复
int PNode::InsertEndNode(int value)
{
CNode *curNode = NULL;
CNode *tailNode = new CNode;
tailNode->nNode = value;
tailNode->next=NULL;//这个别忘,不然指针就悬空了

if (pHeadNode == NULL)
{
pHeadNode = new CNode;//这句最好不要,应该在你类的构造函数中写。不然和上面的if就矛盾了
pHeadNode = tailNode;
}
else
{
curNode = pHeadNode;
while (curNode->next)//这点最重要了,如果用curNode作为判断语句,后果是不可知的
{
curNode = curNode->pNext;
}

curNOde->pNext = tailNode;//要这一句就够了,后面多余
}
return 0;
}


//---------------------------------------------------------------------------------------------
你这样写的话,建的是无头结点链表,建议不采用,应建一个有头结点的,只要改一点就可以了。
一、先在构造函数中建一个头结点:
pHeadNode = new CNode;
pHeadNote->nNode=0;
pHeadNode->next=NULL;

二、 if (pHeadNode->next == NULL)
{
pHeadNode->next = tailNode;
}
三、curNode = pHeadNode->next;
Gengoo 2008-04-19
  • 打赏
  • 举报
回复
非常感谢2位的解答,我已经解决了




int PNode::InsertEndNode(int value)
{
CNode *curNode;
CNode *tailNode = new CNode;
tailNode->nNode = value;

//判断原链表是否为空
if (pHeadNode == NULL)
{
pHeadNode = new CNode;
pHeadNode = tailNode;
pHeadNode->pNext = NULL;
}
else
{
curNode = pHeadNode;

//当当前的下一个结点为空时,说明已经找到最后一个非NULL结点
while (curNode->pNext)
{
curNode = curNode->pNext;
}

curNode->pNext = tailNode;
tailNode->pNext = NULL;
}
return 0;
}

effective_person 2008-04-19
  • 打赏
  • 举报
回复


//插入结点到链表尾
int PNode::InsertEndNode(int value)
{
CNode *curNode = NULL;
CNode *tailNode = new CNode;
tailNode->nNode = value;

if (pHeadNode == NULL)
{
pHeadNode = new CNode;
pHeadNode = tailNode;
pHeadNode->pNext = NULL;
}
else
{
curNode = pHeadNode;
while (curNode)
{
curNode = curNode->pNext;
}

curNOde->pNext = tailNode;//这里写错了吧!
curNode = tailNode;
curNode->next=NULL;
}
return 0;
}

Inhibitory 2008-04-19
  • 打赏
  • 举报
回复
pHeadNode = new CNode;
pHeadNode = tailNode; // 最起码这里都错了, 再仔细改改

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧