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 ...