題目:實現一種演算法,找出單向鍊錶中倒數第 k 個節點。返回該節點的值。
注意:本題相對原題稍作改動
示例:
輸入: 1->2->3->4->5 和 k = 2
輸出: 4
思路:雙指標,fast指標與slow指標儲存k個間隔。
code
public
intkthtolast
(listnode head,
int k)
while
(slow != null && fast != null)
return slow.val;
}
題目:刪除中間節點。實現一種演算法,刪除單向鍊錶中間的某個節點(除了第乙個和最後乙個節點,不一定是中間節點),假定你只能訪問該節點。
示例:
輸入:單向鍊錶a-
>b-
>c-
>d-
>e-
>f中的節點c
結果:不返回任何資料,但該鍊錶變為a-
>b-
>d-
>e-
>f
思路:很簡單,**一目了然。
code
public
void
deletenode
(listnode node)
題目:分割鍊錶。編寫程式以 x 為基準分割鍊錶,使得所有小於 x 的節點排在大於或等於 x 的 節點之前。如果鍊錶中包含 x,x 只需出現在小於 x 的元素之前(如下所示)。分割元素 x 只需處於「右半部分」即可,其不需要被置於左右兩部分之間。
示例:
輸入: head =3-
>5-
>8-
>5-
>10-
>2-
>
1, x =
5輸出:3-
>1-
>2-
>10-
>5-
>5-
>
8
思路:使得所有小於x的節點排在大於或等於x的節點之前,即只要比x小的在x之前就行了,不需要關注比x大的位置。
雙指標,乙個用來從第一位開始存放比x小的數,另乙個指標遍歷,如果遇到就交換兩個指標的值。
code
public listnode partition
(listnode head,
int x)
a1 = a1.next;
}return head;
}private
void
swap
(listnode a1, listnode a2)
程式設計師面試經典 陣列
有一副由nxn矩陣表示的影象,這裡每個畫素用乙個int表示,請編寫乙個演算法,在不占用額外記憶體空間的情況下 即不使用快取矩陣 將影象順時針旋轉90度。給定乙個nxn的矩陣,和矩陣的階數n,請返回旋轉後的nxn矩陣,保證n小於等於500,影象元素小於等於256。測試樣例 1,2,3 4,5,6 7,...
《程式設計師面試經典》 鍊錶
輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。思路 快慢指標,前乙個指標比後乙個指標慢k步。struct listnode class solution else while phead next null return ptail 實現乙個演算法,刪除單向鍊錶中間的某個結點,假定你只能訪問該結點。給定...
經典LINUX程式設計師面試題
面試題是一套筆試題,比較經典 閉卷,100分鐘完卷,最好寫出解題步驟 若你能答對百分之七八十,說明你乙隻腳踏進了linux程式設計的大門,若你能答對百分之九十以上,你收我做 可憐可憐我吧 你若不及格,那就跟我一樣 菜鳥!一 基礎題 1.請列舉出你用過的linux發行版及其中的gcc版本 glib版本...