①暴力解法----就直接遍历两遍链表了。。第一遍先记录总长度,然后总长度减去倒数的就能从头开始数,得到需要的那个了= =、
class Solution:
"""
执行结果:通过
执行用时:36 ms, 在所有 Python3 提交中击败了60.77%的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了13.30%的用户
通过测试用例:208 / 208
"""
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
array = []
statical = head
while head:
array.append(head.val)
head = head.next
pos = len(array) - k
while pos > 0:
statical = statical.next
pos -= 1
return statical
这样的不好在于开辟了新的空间。所以看看题解了= =、
②使用快慢指针,当先走的指针走了k个之后,第二个再走,这样先走的指针达到末尾时,第二个指针的位置就是所需要的。
class Solution:
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
if head == None or k == 0:
return None
preNode = head
rearNode = head
t = 0
while preNode:
if t >= k:
rearNode = rearNode.next
preNode = preNode.next
t += 1
return rearNode