22-链表中倒数第k个节点

问题

输入一个链表,输出该链表中倒数第k个节点。

为符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个节点。

例如,一个链表为 1->2->3->4->5->6 ,则倒数第3个节点是值为4的节点。

解题思路

双指针法:使用两个指针对链表进行遍历,两个指针步长为k-1,当前一个指针走到链表尾节点时,后一个指针正好指向倒数第k个节点

代码实现

class ListNode:
    def __init__(self, value):
        self.value = value
        self.next = None


def last_k(head, k):
    if head is None or k <= 0:
        # 验证输入,对不符合条件的输入进行处理
        return None

    # 定义前一个指针
    j = 0
    probe = head
    while j < k and probe is not None:
        probe = probe.next
        j += 1

    # 如果前一个指针没有走过k步,说明链表长度不足k,应该进行处理
    if j < k:
        return None

    # 定义后一个指针,双指针保持距离进行遍历
    result = head
    while probe is not None:
        probe = probe.next
        result = result.next

    return result.value

  

posted @ 2019-08-27 23:07  Jeemzz  阅读(66)  评论(0编辑  收藏  举报