面试题15: 链表中倒数第k个结点

链表中倒数第k个结点

使用两个指针,一个先移动k-1步,另一个从头指针开,思路很简单,但是需要注意代码的鲁棒性,不如会遇到头结点为空,或者输入的k超出链表自身的长度等等问题。

class Solution:
    def FindKthToTail(self, head, k):
        # write code here
        if head == None or k <= 0:
            return None
        node = head
        while k-1 > 0:
            if node.next:
                node = node.next
                k-=1
            else:
                return None
        while node.next != None:
            node = node.next
            head = head.next
        return head

也可以使用栈:

class Solution:
    def FindKthToTail(self, head, k):
        # write code here
        if not head or k <= 0:
            return None
        node = head
        stack = []
        while node:
            stack.append(node.val)
            node = node.next
        if k > len(stack):
            return None
        else:
            return stack[-k]

其它

类似这种使用两个指针,一个先移动,一个后移动的还包括求链表的中间结点、判断链表是否有环。

posted @ 2017-08-07 16:10  banananana  阅读(108)  评论(0编辑  收藏  举报