【链表】得到单链表中倒数第k个结点

【算法一】

假设单链表有n个节点,如果尾节点为倒数第1个节点,那么则为正向的第n个,有对应关系为(倒数 => 正数):

  • 1 => n
  • 2 => n-1
  • 3 => n-2
  • k => n-k+1

那么求倒数第k个节点转变为求正数第n-k+1个节点。首先我们需要知道有多少个节点(遍历一次),在找正向的第n-K+1个节点(再遍历一次),总的时间复杂度是O(2n)。


【算法二】

设2个指针pa和pb同时指向头节点,pa指针先移动k-1步,然后2个指针同时一步一步地向前移动,当pa指针到达尾节点时,pb指针所指向的正好是倒数第k个节点。这种算法只用遍历链表一次,时间复杂度为O(n)。


【算法三】

反转该链表,此时尾节点变为头节点(遍历一次),然后从头节点开始找第k个节点即可(再遍历一次),时间复杂度也为O(2n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值