今天做了中興的秋招題目,有一個題以前沒有仔細想過,題目我有點兒記不清楚了,大概意思是這樣的:有一個循環的單連結清單,給定該連結清單的尾指針比給定頭指針好麼?
我的思路:如下圖,這是一個循環單連結清單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
F->pNext=ptemp
時間複雜度還是O(n)
删除操作:插入的操作類似,删除頭尾節點的時間複雜度都是O(n)
查找操作:對于單連結清單來說,查找的時間複雜度都是O(n)
情況2:給定尾指針
插入操作:如果插入位置在頭節點之前,需要操作的指針如下
listNode* ptemp=pTail->pNext
pTail->pNext=F
這三個操作的時間複雜度是O(1)
如果插入位置在尾部,需要的操作如下
時間複雜度同樣也是O(1)
删除操作:如果删除的位置是頭節點,由上面分析可以輕易知道操作時間是O(1),如果删除的位置在尾節點,操作需要涉及尾節點前面的節點,是以需要周遊連結清單後進行删除,時間複雜度是O(n)
查找操作:時間複雜度為O(n)
是以,如果給定了循環連結清單的尾指針,其插入和删除的所需要的時間比給定頭指針少,是以給定一個循環連結清單的尾指針比給定頭指針好。
注:如果我的想法有問題,歡迎指正,3Q!!!!!