题目描述
输入一个链表,输出该链表中倒数第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
结束!