中兴的一道笔试题
今天做了中興的秋招題目,有一個題以前沒有仔細想過,題目我有點兒記不清楚了,大概意思是這樣的:有一個循環的單鏈表,給定該鏈表的尾指針比給定頭指針好么?
我的思路:如下圖,這是一個循環單鏈表A和尾指針pHead和頭指針pTail
?既然給定兩個指針來比較,比較的標準是什么?我認為比較的標準是通過給定的指針,操作鏈表的所需要的時間長短
對于鏈表來說,操作主要包括插入,刪除,查找
便于說明,假設上圖中鏈表節點分別為A、B、C、D、E
節點的數據結構為
struct listNode{int value;listNode* pNext; };
情況1:給定頭指針
插入操作:假設插入的節點是F,如果在鏈表的頭節點之前插入,我們需要修改一下幾個指針
F->pNext=pHead
E->pNext=F
我們需要遍歷得到E,所以修改這兩個指針的時間復雜度是O(n)
如果插入位置在尾部,需要修改的以下幾個指針
listNode* ptemp=E->pNext
E->pNext=F
F->pNext=ptemp
時間復雜度還是O(n)
刪除操作:插入的操作類似,刪除頭尾節點的時間復雜度都是O(n)
查找操作:對于單鏈表來說,查找的時間復雜度都是O(n)
情況2:給定尾指針
插入操作:如果插入位置在頭節點之前,需要操作的指針如下
listNode* ptemp=pTail->pNext
F->pNext=ptemp
pTail->pNext=F
這三個操作的時間復雜度是O(1)
如果插入位置在尾部,需要的操作如下
listNode* ptemp=pTail->pNext
pTail->pNext=F
F->pNext=ptemp
時間復雜度同樣也是O(1)
刪除操作:如果刪除的位置是頭節點,由上面分析可以輕易知道操作時間是O(1),如果刪除的位置在尾節點,操作需要涉及尾節點前面的節點,所以需要遍歷鏈表后進行刪除,時間復雜度是O(n)
查找操作:時間復雜度為O(n)
因此,如果給定了循環鏈表的尾指針,其插入和刪除的所需要的時間比給定頭指針少,所以給定一個循環鏈表的尾指針比給定頭指針好。
注:如果我的想法有問題,歡迎指正,3Q!!!!!
轉載于:https://www.cnblogs.com/sjinsa/p/4745079.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: Unable to load nativ
- 下一篇: 数据访问增删改查之单项查询