【算法一】
假设单链表有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)。