暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

双指针解决单链表从尾部删除元素问题

成都有娃儿 2020-03-30
268

昨天写了关于从单链表尾部删除指定位置元素的简单解法,但是这个解法的效率并不高,需要循环两次单链表,第一次去循环整个单链表获取单链表长度,第二次通过正向遍历去找到length - n个元素来完成删除。

其实可以利用两个指针来实现一次遍历,具体算法如下图所示:

和之前的解法不同,我们需要定义一个哑节点来指向头节点(head),然后再重新定义两个指针,第一个指针先行,移动到n+1个节点的位置,然后第二个指针再出发。当第一个指针移动到尾部节点(指向下个节点null),此时第二个节点刚好到了需要被删除的第n个节点的前一个节点,于是删除操作就变得非常容易,将此刻第二个指针指向的节点的next指向next的next指向的节点即可。

整理一下思路,实现代码如下:

双指针的解法更加高效,而且也符合通用型的解题思路,昨天已有热心粉丝提醒,感谢!

学习如逆水行舟,人生的修行,我也愿做与君共勉的自由开发者!

文章转载自成都有娃儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论