[leetcode]19. 删除链表的倒数第n个节点(Java实现)

题目:

一开始看到这个题目我是有点懵的,因为链表没法从尾巴开始找嘛。双重循环肯定是可以解决的,但感觉意义就不大了。

解法1:

这个解法的思想我觉得其实有点像移动窗口。

第一个for循环将temp1和temp2之间的距离保持为n,第二个while循环将两者一起往后移动,当temp2指向这个链表的最后一个节点时,temp1指向倒数第n个节点的前一个节点(可以自己画图模拟试试看),刚好可以用很常用的语句进行链表节点删除。

哑节点主要是因为头结点有可能被删除,避免了特殊判断头节点的消耗。

解法2:

这个是用栈来解决。因为栈有先进后出的特点。

第一个循环把所有的节点都放入栈,第二个循环开始从栈顶弹出。

弹出的第一个数是链表的倒数第一个数,弹出的第二个数是链表的倒数第二个数。

弹到倒数第n个数的时候就可以执行删除语句啦。

ps:放入栈中毫不影响节点间next的链接关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值