输入一个链表,输出该链表中倒数第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日)