-
1 .使用引用指针或指向指针的指针,因为这样可以更改参数为指针的变量,例如分配内存。
2.可以删除前端的头部指针,但是去掉haed后需要用另一个指针指向头部指针,这不太容易理解,所以最好在上面这样做,即让头部始终指向头部。
3.如果堆中申请的内存没有被删除,那么在程序完成之前,它总是会占用这个内存,如果堆中应用的变量很多,就会占用大量的内存,所以对于没有使用的堆变量,应该及时删除。
-
1 其实指针的引用就是指针的别名,因为链表预先定义了一个节点类,然后用new来打开空间。 打电话时更方便。 不带指针的引用也是可能的。
2.如果你是单链表或双链表,前端的0是不能删除的,因为它是链表标题中的标记。 作为循环链表,可以删除,链表末尾的值可以直接分配给链表头。
3 清空 p 是为了节省内存,也是一种良好的编程习惯。 因为很多程序员用new来打通空间,以后忘记释放,导致内存泄漏。
-
1.链表是指针,节点本来就是指针,但是指针指向的类中有数据,所以需要使用指针作为参数。
3. 清空 p 只是为了节省内存。
-
1.终端节点无法删除的问题,可以想象一个只有三个节点的链表,终端节点的id=findid,开头p指向第二个节点,然后在执行第一个if时,因为p->next->id==findid,第二个if语句被执行,但是这个时候, p->next->next 等于 null,因此不执行已删除节点的 **。
2.当只有一个节点时,因为p=head->next在开头定义,p=null在开头定义,当第一个if执行时,p->next->id的对象不存在,所以发生错误; 当只有两个节点时,同上,但此时 p->next 开头为 null,因此 p->next->id 也不存在,也会出错。
在编写程序时,最好将每个节点的图片画出来,并将每个指针放在自己的位置进行操作,这样错误率会低很多。 这是我写的关于删除节点的内容
studentnode *p1,*p2;p1 用于指向下一个节点,p2 用于指向前一个节点。
if( (head->next=null)
当 elseelse 找不到要删除的节点时,请推迟 p1 和 p2。
while(p1!=null)
return 0;}
-
根据您提供的内容,因为“只有 1 或 2 个程序也无法运行...... 所以我想程序的数据结构应该是这样的,首先考虑为什么只有一两个就跑不动了,head本身也是存储数据的链表,它是第一个有用的节点,head->next是第二个有用的节点,head->next>next是空的......
查看您的 **“studentnode * p = head->next”,是从 head->next 节点(即第二个节点)向上查找,查看“while (p) {.}
if (findid == p->next->id) {
当 p 不为空时,循环执行里面的东西,当只有一个节点时,head->next 为空,根据 “studentnode * p = head->next”,p 为空,while 循环不执行,当只有两个节点时,根据 “studentnode * p = head->next”,p 指向第二个节点,不为空, 但看**“而(p){
if (findid == p->next->id) {p->next 是第三个节点,它是空的,里面没有内容,所以执行 p->next->id 是错误的。。。和 **“if (p->next->next!= null) {p->next, p->next->next 比较有问题...。。。
**本身就有很多问题,更改以上问题后还会有其他问题,可以添加QQ(用户名)给你详细讲解。
至于最后一个节点无法删除的情况,我不明白,程序不完整。
cin 的内容缓存了,需要通过以下两行清除**,必须先清除标志,然后同步清除缓冲区。;; >>>More