题目描述
输入一个链表,输出该链表中倒数第k个结点。
解答
方法一:
先将链表反转,再正序输出第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:
return None
h1 = None
h2 = None
# 创建链表
for i in range(len(head)-1, 0, -1):
h1 = ListNode(head[i])
h1.next = h2
h2 = h1
# 反转链表
probe = None
next = None
while h1:
next = h1.next
h1.next = probe
probe = h1
h1 = next
# 输出正序第k个
n = 0
while probe != None:
n += 1
if n == k:
return probe.val
probe = probe.next
# 超出边界
return None
print Solution().FindKthToTail([1,2,3,4,5],2)
方法二:
创建两个指针,第一个指针先走k步。然后两个指针一起走,当第一个指针走到尾部,第二个指针正好走到倒数第k个结点。
class Solution:
def FindKthToTail(self, head, k):
# write code here
# 创建两个指针
slow,fast=head,head
# fast先走k个节点
for i in range(k):
if not fast:
return None
fast=fast.next
# fast走完,两个指针一起走
while fast:
slow=slow.next
fast=fast.next
return slow
结束!