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

来源:互联网 发布:软件架构设计师论文 编辑:程序博客网 时间:2024/06/07 20:11

【算法一】

假设单链表有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)。