先获取到这个最后的元素然后在remove它
有可能出问题,老师很多细节都没有太抠,因为主要目的是讲数据结构嘛。
可以在前面多加个判断。
这个是临时写的吧,后边改成了int了
你这是电话号码吗同学
我感觉是currentNode初始值决定了for循环最终取到的是第i个节点点——初始值时头节点,而不是头节点的next,只有当初始值时头节点的next时,for循环结束后取出来的才是第i+1个元素。
也可以自己推算下,当i=0时,currentNode=head.next,取的刚好时第0个元素;当i=1时,currentNode=head.next.next,取的刚好时第1个元素……,依次类推即可
好家伙自问自答
这要看一下类的定义是不是哪儿写错了没有
这个是键的设置是这样的吧
currentNode = currentNode->next;
只写这一句的话,在操作的时候,没有办法知道当前节点的前驱结点。 对于Listdelete函数,需要不同的判断条件来实现删除功能。 对于GetElem函数,它并不需要知道前驱结点的位置,因此是可以的。
是不是没有在英文输入法下输入符号?
m_pList[i]=m_pList[i+1]的话,一定不行, 因为for循环不会改变i值。
但如果是 m_pList[k]=m_pList[k+1] 需要修改for循环里面对k的赋值和判断,然后可以运行。
如果不改k的话,是不能实现想要的效果的(会删掉从这个元素 后一个元素的值)。
在老师的范例代码之中确实是这样的,这样的链表是带有头结点的链表,按你的理解是没有问题的,头结点名称可以代表链表的名称。但同时还有一种形式的链表是没有头结点的,头结点直接就开始存储有效数据了。当然这都是后话,对于带头结点的链表,你现有的理解是正确的,就这样记住就很好。?
头结点不是第一个结点,链表长度不包含头结点,i从头结点之后的第一个结点(0号结点)算起,比如i=3,那就是第四个结点
能不能问题写清楚点,然后挂个CSDN的代码链接,我好下去调试看看。这么一堆,让人怎么看。
不太建议,因为里面的代码涉及到c++里的类,动态分配new,delete等知识。你可以先把这个老师的C++系列看了,我觉得他讲的还不错
我觉得原因不是没有内存空间,这里的形参pNode是个指针类型的,它指向的和实参所指向的是同一个地址吧,它是有内存空间的,只是我们不能把它弄到链表里,因为如果这样做了,链表在清空的时候会把每个节点都释放,也就是把 实参 所指向的内存给释放掉了,这并不是我们想要的结果,所以有必要建立一个newNode,这样对这个链表操作的时候就不会影响到这个链表以外的东西,我是一枚小白,这是个人理解,说的不对还请多多指教!
构造函数有问题,应该为m_pList = new int[m_iSize],这样申请的才是一个数组,析构函数才会正确执行
记得之前课讲过了 在运算符重载那一课 可以回去看看
记忆里是因为要求函数的第一个参数必须是ostream&类型的,而如果成员函数的话,会默认第一个参数都是this指针,会冲突。
m_pList = new int[m_iSize];
构造函数中这行代码申请数组应该用中括号[ ]。即使如此,你仍然可以看到程序运行结果。因为:
“程序会在释放缓冲区时通知您,而不是在您犯错时”-- 参考:
不仔细看还真不好看出来~
不行。
如果不加* 写成int e,在函数执行的时候是创建一个新的形参e,在函数执行结束之后会直接销毁,你无法获取到这个数据。
当然这个地方你用int& e ,取别名的方式,也是可以的。
老师好像是说 ==只传进去一个参数 ,所以就不需要用友元函数重载
namespace,List::List()这句指明是在List这个类下面的List()方法,建议回看下C++基础课程
哦,第四行写错了,改为if (CurrentNode->data == pCurrentNode->data)?
可以的?
当然先要从0遍历到i使currentNode来到i节点的位置
temp->next代表着*temp这个节点的指针域
newNode->next需要指向一个节点的地址,而temp就是*temp的地址
大兄弟,相等是“==”符号,这里的“=”符号是把后面的值赋予给前面的值