劍指offer之Python練習三

2021-08-09 07:42:37 字數 4299 閱讀 3338

1.用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

class solution:

def __init__(self):

self.stack1=

self.stack2=

def push(self, node):

# write code here

def pop(self):

# return xx

if not self.stack2:

while self.stack1:

a=self.stack1.pop()

return self.stack2.pop()

2.

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。

class solution:

def __init__(self):

self.stack=

self.minstack=

def push(self, node):

# write code here

if not self.minstack or node < self.minstack[-1]:

def pop(self):

# write code here

if self.stack[-1]==self.minstack[-1]:

self.minstack.pop()

return self.stack.pop()

def top(self):

# write code here

return self.stack[-1]

def min(self):

# write code here

return self.minstack[-1]

3.

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

class solution:

def ispoporder(self, pushv, popv):

# write code here

if not pushv or len(pushv)!=len(popv):

return 0

stack=

for i in pushv:

while len(stack) and stack[-1]==popv[0]:

stack.pop()

popv.pop(0)

if len(stack):

return 0

return 1

4.給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。

class solution:

def maxinwindows(self, num, size):

# write code here

if size == 0 or num == :

return

tmp=

for i in xrange(len(num)-size+1):

return tmp

5.輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

# -*- coding:utf-8 -*-

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class solution:

# 返回從尾部到頭部的列表值序列,例如[1,2,3]

def printlistfromtailtohead(self, listnode):

# write code here

l =

head = listnode

while head:

l.insert(0, head.val)

head = head.next

return l

6.

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

class solution:

def findkthtotail(self, head, k):

# write code here

l=while head!=none:

head=head.next

if k>len(l) or k<1:

return

return l[-k]

7.

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

class solution:

# 返回合併後列表

def merge(self, phead1, phead2):

# write code here

res = head = listnode(0)

while phead1 and phead2:

if phead1.val > phead2.val:

head.next = phead2

phead2 = phead2.next

else:

head.next = phead1

phead1 = phead1.next

head = head.next

if phead1:

head.next = phead1

if phead2:

head.next = phead2

return res.next

8.輸入兩個鍊錶,找出它們的第乙個公共結點。

class solution:

def findfirstcommonnode(self, phead1, phead2):

# write code here

tmp=

node1=phead1

node2=phead2

while node1:

node1=node1.next

while node2:

if node2 in tmp:

return node2

else:

node2=node2.next

9.乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。

class solution:

def entrynodeofloop(self, phead):

# write code here

tmp=

p=phead

while p:

if p in tmp:

return p

else:

p=p.next

10.在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

class solution:

def deleteduplication(self, phead):

# write code here

if phead is none or phead.next is none:

return phead

head1=phead.next

if head1.val != phead.val:

phead.next=self.deleteduplication(phead.next)

else:

while phead.val == head1.val and head1.next is not none:

head1=head1.next

if phead.val != head1.val:

phead=self.deleteduplication(head1)

else:

return none

return phead

javascript劍指offer程式設計練習 4

題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。function treenode x function printfromtoptobottom root let queue queue.push root let result while queue.length if node...

《劍指offer》程式設計在練評判

劍指offer 面試題集收錄彙總 面試題1 賦值運算子函式 面試題2 實現singleton模式 面試題3 二維陣列中的查詢 已收錄面試題4 替換空格 已收錄面試題5 從頭到尾列印鍊錶 已收錄面試題6 重建二叉樹 已收錄面試題7 用兩個棧實現佇列 已收錄面試題8 旋轉陣列的最小數字 已收錄面試題9 ...

劍指offer之Python練習二

1.輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,class solution def getleastnumbers solution self,tinput,k write code here if len tinput ...