输入一个链表,输出该链表中倒数第k个节点。
双指针。先让指针rear后移k步,再同步后移指针front和rear,直到rear为空时则输出front。
class Solution:
def find_kth_to_tail(self, node, k):
if not node:
return node
if k <= 0: # k应该大于0
return None
front, rear = node, node
for ki in range(k):
if rear:
rear = rear.next
else: # 节点总数小于k
return None
while rear:
front = front.next
rear = rear.next
return front
st = Solution()
node = ListNode(1)
node.next = ListNode(2)
node.next.next = ListNode(3)
node.next.next.next = ListNode(4)
print(st.find_kth_to_tail(node, 2).val)
相关题目:求链表的中间节点
如果链表中的节点总数为奇数,则返回中间节点;
如果节点总数是偶数,则返回中间两个节点的任意一个。
双指针。同时从链表的头节点出发,一个指针front一次走一步,另一个指针rear一次走两步。当走得快的指针rear走到链表的末尾时,走得慢的指针front正好在链表的中间。
class Solution:
def find_middle_node(self, node):
if not node:
return node
front, rear = node, node.next
if rear:
rear = rear.next
while rear:
front = front.next
rear = rear.next
if rear:
rear = rear.next
return front
(最近更新:2019年09月21日)
本文介绍使用双指针解决链表中倒数第k个节点及中间节点问题的方法。对于倒数第k个节点,先让一指针后移k步,再同步后移双指针直至找到目标。对于中间节点,一指针一次走一步,另一指针一次走两步,当快指针到达末尾时,慢指针即在中间。
4690

被折叠的 条评论
为什么被折叠?



