题目
题目描述
输入一个链表,输出该链表中倒数第k个结点。
示例1
输入
1,{1,2,3,4,5}
返回值
{5}
一、思路
思路1:快慢指针
- 若先将快指针移到和慢指针差k-1的位置
- 快慢指针一起后移,直至快指针到达尾结点
- 此时慢指针的位置,即倒数第k个节点
思路2:翻转链表
- 先将链表反转
- 从反转后的头结点(即反转前尾结点)往后移动k-1个位置
- 此时指针的位置,即反转前链表的倒数第k个节点
思路3:计数法
- 先遍历一遍有n个节点
- 再计算所求节点为正向遍历的第n-k个节点
二、代码
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 快慢指针
def FindKthToTail(self, head, k):
# write code here
if not head or k==0:return None
pre=head
last=head
for i in range(k-1):
last=last.next
if not last:return None
while last.next:
last=last.next
pre=pre.next
return pre
三、总结
1.快慢指针时间复杂度O(n)
2.其他暴力法O(
n
2
n^2
n2)