题目描述
输入一个链表,输出该链表中倒数第k个结点。
运行时间:28ms
占用内存:5728k
方法一:
# -*- 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
# 方法一:遍历两次,第一次遍历算出链表有多少个节点,并算出倒数第K个是顺数第几个。第二个遍历就是找出该节点。
p = head
n = 0
while p is not None:
n += 1
p = p.next
if k > n:
return
else:
m = n - k + 1
p = head
for i in range(1,m):
p = p.next
return p
方法二:
运行时间:21ms
占用内存:5728k
# -*- 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
# 方法二:遍历一次得到答案。但是需要用到两个指针。第一个指针,先走k-1步,然后第k步的时候,第二个指针也开始走
# 那么当第一个指针到达尾部的时候也是第二个指针到达倒数第K个的时候。
if k == 0:
return
p1 = head
p2 = head
n = 1
while p1 is not None:
if n <= k-1:
# 先判断会不会长度会不会大于k,如果小于k那么就直接return false
if p1.next is not None:
p1 = p1.next
n += 1
else:
return
else:
if p1.next is not None:
p2 = p2.next
p1 = p1.next
else:
return p2