ps:這也是一道出鏡率極高的面試題,我相信很多童鞋都會很眼熟,就像於千萬人之中遇見不期而遇的人,沒有別的話可說,唯有輕輕地問一聲:「哦,原來你也在這裡? 」
題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。例如輸入下圖中的鍊錶1和鍊錶2,則合併之後的公升序鍊錶如鍊錶3所示。鍊錶結點定義如下,使用c#描述:
publicstep1.定義乙個指向新鍊錶的指標,暫且讓它指向null;class
node
//指向後乙個節點
public node next
public node(int
data)
public node(int
data, node next)
}
step2.比較兩個鍊錶的頭結點,讓較小的頭結點作為新鍊錶的頭結點;
step3.遞迴比較兩個鍊錶的其餘節點,讓較小的節點作為上乙個新節點的後乙個節點;
public(1)借助msunit框架進行初始化與清理工作[testinitialize]與[testcleanup]node merge(node head1, node head2)
else
if (head2 == null
)
node newhead = null
;
if (head1.data <=head2.data)
else
return
newhead;
}
private(2)封裝乙個便於測試對比的輔助方法,將新鍊錶生成乙個字串用於對比mergehelper mergehelper;
[testinitialize]
public
void
initialize()
[testcleanup]
public
void
cleanup()
public(1)功能測試string
getliststring(node head)
stringbuilder sblist = new
stringbuilder();
while (head != null
)
return
sblist.tostring();
}
//(2)特殊輸入測試list1: 1->3->5
//list2: 2->4->6
[testmethod]
public
void
mergetest1()
//兩個鍊錶中有重複的數字
//list1: 1->3->5
//list2: 1->3->5
[testmethod]
public
void
mergetest2()
//(1)測試通過情況兩個鍊錶都只有乙個數字
//list1: 1
//list2: 2
[testmethod]
public
void
mergetest3()
//兩個鍊錶中有乙個空鍊錶
//list1: 1->3->5
//list2: null
[testmethod]
public
void
mergetest4()
//兩個鍊錶都是空鍊錶
//list1: null
//list2: null
[testmethod]
public
void
mergetest5()
(2)**覆蓋率
出處:
劍指offer 面試題16
include 思路 遍歷鍊錶過程中,將各個指標入棧,再出棧進行反轉 listnode reverselist listnode phead pnode pnodestack.top listnode pfront pnode pnodestack.pop while pnodestack.empt...
劍指offer 面試題16 反轉鍊錶
題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...
劍指Offer面試題16 反轉鍊錶
反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...