面试题 02.02. 返回倒数第 k 个节点
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
a, b = head, head #a,b同时指向头结点
for i in range(k):
a = a.next #a走k步,a.next是下一个节点得地址
while a: #a,b同时走
a = a.next
b = b.next
return(b.val)
这个代码的时间复杂度为O(n),空间复杂度为O(1)
下面这个代码时间复杂度为O(n),空间复杂度为O(n),因为创建了一个长度为链表长度的临时的数组。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
# a, b = head, head
# for i in range(k):
# a = a.next
# while a:
# a = a.next
# b = b.next
# return(b.val)
buffer = []
while head:
buffer.append(head.val)
head = head.next
return buffer[-k]
第一次做链表的题,其实这里应该最重要的是要知道链表是怎么创建的,链表的操作有什么,leetcode上面都是实线好的链表,面试有可能会问到链表怎么创建,下一个博客就写下链表是怎么创建的以及链表的操作。