算法题/链表中倒数第K个结点

来源:互联网 发布:mysql备份 编辑:程序博客网 时间:2024/06/05 14:57

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

两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。

#coding:utf-8class ListNode:    def __init__(self,x):        self.val = x        self.next = Noneclass Solution:    def FindKthToTail(self,head,k):        front = head        tail = head        #将一个指针指向第k个位置        for i in range(k):            if front == None:                return            if front.next == None and i == k-1:                return head            front = front.next        #首指针和尾指针同时移动        while front.next != None:            front = front.next            tail = tail.next        return tail.nextif __name__ == '__main__':    node1 = ListNode(10)    node2 = ListNode(11)    node3 = ListNode(12)    node4 = ListNode(13)    node5 = ListNode(14)    node6 = ListNode(15)    node1.next = node2    node2.next = node3    node3.next = node4    node4.next = node5    node5.next = node6    node6.next = None    s = Solution()    print(s.FindKthToTail(node1,2).val)