题目
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
例如给定一个链表: 1->2->3->4->5->6, 和 k = 3.
返回链表 4->5.
思路
定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动;
从第k步开始,第二个指针从链表的头指针开始遍历。
由于两个指针的距离保持在k-1,当第一个指针到达链表的尾结点时,第二个指针正好走到倒数第k个节点。
解法
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
if head == None: return False
if k == 0: return False
first,second = head,head
count = 1
while first:
if count == k: break
else:
first = first.next
count += 1
if count < k:
return False
while first.next!=None:
first=first.next
second=second.next
return second
复杂度分析
时间复杂度为 O(N)
空间复杂度 为O(1)