小记:一开始用的元素值作为条件判断,但是忽略了链表中可能有重复元素。
注意:测试用例:
[4,5,4]
1
方法一:双指针(快慢指针)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
# 双指针(快慢指针,一次遍历即可)
fast, slow = head, head
while k:
fast = fast.next
k -= 1
while fast:
fast = fast.next
slow = slow.next
return slow
方法二:两次遍历
class Solution:
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
p,cnt = head, 1 # 两次遍历,已AC
while p:
p = p.next
cnt += 1
cnt = cnt - 1 # 总结点数
p, i = head, 1
for i in range(cnt - k):
p = p.next
return p