剑指Offer[Python版]

Posted Christine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer[Python版]相关的知识,希望对你有一定的参考价值。

面试题5 从尾到头打印单链表

题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:链表的每个元素由两部分组成,元素值和下一个元素的地址,输入一个链表,开始指针指向第一个节点,操作完一个节点接着将指针指向第二个节点,将元素值保存在列表中,逆序操作是list[::-1]
代码:

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        res = []
        while listNode:
            res.append(listNode.val)
            listNode = listNode.next
        return res[::-1]

面试题6 重建二叉树

题目表述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:
递归思想。前序遍历中第一个元素是根,因此在中序遍历中找到根的位置下标,根将中序遍历分为两部分,分别是左子树和右子树,然后继续递归寻找左右子树的根节点。
代码:

class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if not pre or not tin:
            return None
        root = TreeNode(pre[0])
        index = tin.index(pre[0])
        root.left = self.reConstructBinaryTree(pre[1:1+index],tin[:index])
        root.right = self.reConstructBinaryTree(pre[1+index:],tin[1+index:])
        return root

面试题7 用两个栈实现队列

题目表述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:
实现入队和出队操作,stackA用来进栈,stackB出栈,stackB为空则stackA出栈给stackB
代码:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stackA = []
        self.stackB = []
    def push(self, node):
        self.stackA.append(node)
    def pop(self):
        if not self.stackB:
            while self.stackA:
                self.stackB.append(self.stackA.pop())
        return self.stackB.pop()

面试题:链表中倒数第K个节点

解题思路1 将链表遍历一遍,返回倒数第K个节点
代码

class Solution:
    def FindKthToTail(self, head, k):
        # write code here
        l = []
        while head != None:
            l.append(head)
            head = head.next
        if k > len(l) or k < 1:
            return
        return l[-k]

解题思路2:倒数第k,就是正数第n-k+1(从1开始),设置两个指针p1 p2,p1先走k-1步,然后p1 p2再一起走 p1为到达最后一个时,p2位于链表第n-k+1节点,也就是倒数第k个节点
代码

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

参考题目地址:剑指Offer编程题 牛客网

以上是关于剑指Offer[Python版]的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer[Python版]

剑指Offer数据结构之Hash Table和图[Python版]

剑指Offer数据结构之Hash Table和图[Python版]

剑指offer python版 替换空格

剑指Offer数据结构之栈和队列[Python版]

剑指Offer数据结构之栈和队列[Python版]