您现在的位置是:网站首页> 编程资料编程资料
给定链表中间节点指针,删除中间节点的方法_linux shell_
2023-05-26
350人已围观
简介 给定链表中间节点指针,删除中间节点的方法_linux shell_
问题如下
输入:链表 a->b->c->d->e中指向节点c的指针
输出:无返回值,但新链表变为a->b->d->e
解答:
想了好久没想出来,看了提示才知道解法的。这里用到了一个小技巧。要删除中间节点,但是我们不知道要删除节点的上一个节点p,所以无法通过修改指针的方法(p->next=del->next)来删除节点,但知道要删除节点的后一个节点,那么我们换一个思路,把要删除的节点的数据与该节点的后一个节点的数据交换,然后删除后一个节点,从而达到目的。但是该方法不能删除最后一个节点,原因显而易见。
// a tricky solution,can't 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);
}
输入:链表 a->b->c->d->e中指向节点c的指针
输出:无返回值,但新链表变为a->b->d->e
解答:
想了好久没想出来,看了提示才知道解法的。这里用到了一个小技巧。要删除中间节点,但是我们不知道要删除节点的上一个节点p,所以无法通过修改指针的方法(p->next=del->next)来删除节点,但知道要删除节点的后一个节点,那么我们换一个思路,把要删除的节点的数据与该节点的后一个节点的数据交换,然后删除后一个节点,从而达到目的。但是该方法不能删除最后一个节点,原因显而易见。
复制代码 代码如下:
// a tricky solution,can't 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);
}
您可能感兴趣的文章:
相关内容
- linux网络编程用到的网络函数详解用和使用示例_linux shell_
- Linux内核链表实现过程_linux shell_
- 更改linux用户登录shell的操作方法_linux shell_
- linux基础之Shell Script入门介绍_linux shell_
- shell编程基础之认识与学习BASH_linux shell_
- shell脚本中case条件控制语句的一个bug分析_linux shell_
- 一个shell for循环与case结合的脚本(监控程序状态)_linux shell_
- shell中case的用法学习笔记_linux shell_
- linux bash shell中case语句的实例_linux shell_
- linux bash中too many arguments问题的解决方法_linux shell_
