单链表的删除结点

举例:

 

有ai-1这个元素的指针的时候,我们怎么找到ai+1的指针?通过如下方式

 

先用指针p指向ai-1,ai的结点是p->next,然后(p->next)->next,然后找到了ai+1的指针,把他赋值给指针p的next域

这个是删除算法最重要的一步

怎样把不要的第i个元素删除呢?直接修改i-1这个结点的指针域,改成他的后继结点的后继结点。然后这个指针直接指向后继结点的后继结点。

 

那再总结一遍,怎么操作:首先找到后继结点p-next,他的next域存了ai+1,我们把ai+1的地址赋值给指针变量p所指的这个next域

 

又用一个指针q,这里把ai释放了,也是需要把它在哪里事先记住,修个了这个指针以后,他的地址就没了。如果不事先记住的话,就找不到ai结点了,所以需要另外一个变量q

具体算法如下:

这个e是我们删除以后的结点,他的值如果需要的话,要通过这个变量保存起来

 

删除元素后的新链表仍要通过新链表L返回,所以要返回的是链表,一个是删除元素的值,所以他们两个我们使用引用型变量

我们需要三个变量。这里漏了个q

第一步,找到删除结点的前驱是i-1,用p指向i-1,这里又是查找第i-1个结点

接下来如果你要删除第0个或者大于n,你都没法删,值不合理。要么太大要么太小

 

q指向我们要删除的结点,怎么指向呢?就是他的前驱的下一个结点,

 

所以q=p->next

 

,p指针指向我们要删除的这个结点的前驱i-1

然后是关键一步,修改指针:

 

 

将我们要删除结点的前驱,就是p指针所指的这个结点p->next,修改他的next域,变成他的后继结点,我们可以用(p->next)->next,也可以用q->next.就是ai+1的地址在q的next域里存着,所以直接p->next=q->next

再用e保存删除结点的数据域的值,然后将q结点删除,结束

 

总结几个重要操作:

1.将ai+1连接到ai-1,即要删除结点的前一个结点

2.需要找到他的前驱

3.删除le'de可以直接delete删了

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值