leetcode--python--面试题 02.02

面试题 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上面都是实线好的链表,面试有可能会问到链表怎么创建,下一个博客就写下链表是怎么创建的以及链表的操作。

猜你喜欢

转载自blog.csdn.net/AWhiteDongDong/article/details/111155447