给定链表中间节点指针,删除中间节点的方法

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

问题如下

输入:链表 a->b->c->d->e中指向节点c的指针

输出:无返回值,但新链表变为a->b->d->e

解答:

想了好久没想出来,看了提示才知道解法的。这里用到了一个小技巧。要删除中间节点,但是我们不知道要删除节点的上一个节点p,所以无法通过修改指针的方法(p->next=del->next)来删除节点,但知道要删除节点的后一个节点,那么我们换一个思路,把要删除的节点的数据与该节点的后一个节点的数据交换,然后删除后一个节点,从而达到目的。但是该方法不能删除最后一个节点,原因显而易见。

复制代码

代码如下:

// a tricky solution,cant delete the last one element

int delete_node(NODE* node) {

  int data;

  NODE *p=node->next;

node->data=p->data;

   node->next=p->next;

  free(p);

}

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容