鏈式儲存面試題 單鏈表反轉

2021-06-28 05:11:15 字數 1528 閱讀 8317

出現位置:第一輪基礎類筆試或技術一面

難度係數:中

面試題目:

實現乙個單鏈表的反轉。例如:

10   9   8   7   6   5   4   3   2   1

反轉後應該為:

1   2   3   4   5   6   7   8   9   10

要求10分鐘內寫出**,注意**風格及時間複雜度/空間複雜度。

考點分析:

(1)基本概念:鍊錶基礎,**規範問題,**健壯性問題。

(2)對時間複雜度的敏感。

解題思路:

「一問,二畫,三答」

一問:問清題目,跟面試官交流,找出面試官看重什麼,出題的目的是什麼。

二畫:不先寫**,先理清思路,在紙上畫一畫。

初步思路如下:

1、額外再申請乙個鍊錶,使用前插入的方法即可。(涉及到空間複雜度的問題)

2、先找最後乙個,再找倒數第二個。(涉及到時間複雜度的問題)

所以,以上兩條都不滿足條件。這時就得和面試官交流是不是重點考察複雜度的問題。

有的面試官直接要求時間複雜度為o(n)。

則可以有下面的解題思路:

next = temp->next;          //乙個初始狀態

temp->next = prew;          //改變指標的指向,實現反轉

temp = next;                //後移一位

prev = temp;//後移一位

迴圈的條件是temp!=null

寫出規範的**的話,需要考慮特殊情況:

1、null的時候

2、1個節點的時候

**如下:

#include

#include

typedef struct node//定義了乙個鍊錶的結構體

lnode, *linklist;//typedef 是用後面的兩個名字替代結構體型別名

linklist link_insert(linklist p,int num)

temp->idata=num;

temp->next=p;

p=temp;

return p;

}void link_print(linklist temp)

printf("\n");

}linklist reverse_link(linklist list)

return prev; //返回最後乙個節點,prev指向最後乙個節點,它變成了新的鍊錶的頭

}int main()

printf("在反轉後:\n");

head = reverse_link(head);

link_print(head);

return 0;}

面試題 單鏈表反轉

問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...

鏈表面試題 反轉單鏈表

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null解決方案 頭插法開闢新鍊錶並逐個讀取舊鍊錶,頭插進新鍊錶,這樣新的鍊錶與原鍊錶的結構就是反的,需要借助輔助空間 definition for singly linked list.struct listnod...

開心IT面試題 單鏈表排序 反轉

一 單鏈表排序 仿照基於陣列的氣泡排序演算法 node sorting linklist node node node result int temp 0 int len length linklist node result node for int j 0 j len j result resu...