【发布时间】:2017-11-19 00:24:35
【问题描述】:
有两个函数适用于我的链表实现:AddToTail 和 PrintList。
AddTotail 将节点添加到尾部。PrintList 将打印列表中的第一个节点。
这是我实现这个想法的尝试:
#include <iostream>
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
void AddToTail(ListNode** &pHead, int value)
{
ListNode* pAdd = new ListNode();
pAdd->m_nKey = value;
pAdd->m_pNext = nullptr;
if(pHead==nullptr)
{
pHead = &pAdd;
}
else
{
ListNode* pTmp = *pHead;
while(pTmp->m_pNext!=nullptr)
{
pTmp = pTmp->m_pNext;
}
pTmp->m_pNext = pAdd;
}
}
void PrintList(ListNode** &pHead) {
if (pHead==nullptr) return;
std::cout << (*pHead)->m_nKey << std::endl;
}
int main() {
ListNode** pHead = nullptr;
AddToTail(pHead, 1);
std::cout << (*pHead)->m_nKey << std::endl;
AddToTail(pHead, 2);
std::cout << (*pHead)->m_nKey << std::endl;
PrintList(pHead);
return 0;
}
输出如下:
1
2
-306755624
与预期不同:
1
1
1
问题是*pHead 的值在我添加新节点后或在函数中发生了变化。
我认为这是因为我在函数中使用了对指向指针的指针的引用。但是,如果我 dont use references, thepHeadfrommain()` 不会受到我的功能的影响...
【问题讨论】:
-
你能澄清一下这里的问题吗?
-
还有一个关于您显示的代码的小注释:可能不需要指针到指针。删除一个级别,它会更简单,可能更容易处理并使其全部正确。
-
这是我第一次在 stackoverflow 上提问,很抱歉我的问题很糟糕。我会努力做得更好。
-
第二 - 看起来 printlist 应该是递归的,但它不是,它只打印列表头
标签: c++ pointers dereference