關於鍊錶的幾道大廠面試題

2021-10-06 18:56:49 字數 1754 閱讀 8572

獲取鍊錶中的有效節點個數:這是十分簡單的一道面試題,只需要將鍊錶除了頭節點遍歷即可,實現如下

//獲取整個鍊錶的有效節點個數

public

static

intlength

(heronode headnode)

int length =0;

heronode curheronode = headnode.next;

while

(curheronode != null)

return length;

}

獲取鍊錶中的倒數第n個節點的資料:這道題也比較簡單,首先我們需要傳入兩個引數,乙個引數就是獲取到整個鍊錶的頭節點,另乙個引數就是獲取你要查詢的倒數第n個節點的下標,下一步我們需要獲取整個鍊錶的長度,用上面的方法即可獲取到整個鍊錶的長度,然後我們需要判斷當我們的頭節點的next = null 或者要查詢的倒數第n個節點不存在時我們可以直接返回乙個null,然後我們需要通過遍歷來獲得第n個節點,其實非常簡單遍歷到size-index(要查詢的倒數第n個節點)即可,實現如下

public

static heronode findlastindexnode

(heronode heanode,

int index)

if(index <=

0|| index > size)

heronode curnode = heanode.next;

for(

int i =

0; i < size - index; i++

)return curnode;

}

反轉整個鍊錶:先定義乙個新的節點reversehead = new heronode() 這個節點作為乙個新的鍊錶的頭節點,然後開始遍歷原始鍊錶,遍歷到乙個節點就將其取出新增到新的頭節點上去,然後將每次取出的節點都新增到上一次取出的節點的前面去,最後當原始鍊錶遍歷完了之後,再將head.next = reversehead,next 即完成了整個鍊錶的反轉。在這裡我們需要注意的是,為了防止原始的鍊錶斷開,需要建立乙個臨時的變數來進行儲存。

public

static

void

reverselist

(heronode head)

//開始遍歷直到遍歷到整個鍊錶的末尾,也就是當curnode.next = null時

while

(curnode != null)

head.next = reverseheadnode.next;

}

實現反向輸出整個鍊錶:那麼我們有兩種實現方法,第一種方法就是我們上面實現的方法,將整個鍊錶反轉再進行列印,但是這種方法的弊端就是會破壞掉原始的鍊錶,如果別人在使用就會很麻煩。方法二就是將鍊錶的節點依次壓入棧中,根據棧的先進後出原則,再將這些節點 出棧即可,實現如下

public

static

void

reverseprint

(heronode headnode)

stack

stack =

newstack

(); heronode curheronode = headnode.next;

while

(curheronode != null)

while

(stack.

size()

>0)

}

關於linux的幾道面試題

1 linux中主要有哪幾種核心鎖?linux的核心鎖主要是自旋鎖和訊號量。自旋鎖最多只能被乙個可執行執行緒持有,如果乙個執行執行緒試圖請求乙個已被爭用 已經被持有 的自旋鎖,那麼這個執行緒就會一直進行忙迴圈 旋轉 等待鎖重新可用。要是鎖未被爭用,請求它的執行執行緒便能立刻得到它並且繼續進行。自旋鎖...

幾道面試題

系統呼叫與函式的區別 從程式完成的功能來看,函式庫提供的函式通常是不需要作業系統的服務,函式是在使用者空間內執行的,除非函式涉及到i o操作等,一般是不會切到核心態的。系統呼叫是要求作業系統為使用者提供程序,提供某種服務,通常是涉及系統的硬體資源和一些敏感的軟體資源等。函式庫的函式,尤其與輸入輸出相...

幾道面試題

1 下列程式片段執行時間排序 1 for uint i 0 i 1024 i char url char malloc 4096 memset url,0x0,4096 free url 2 for uint i 0 i 1024 i 3 char url char malloc 4096 for ...