天天看點

中興的一道筆試題

  今天做了中興的秋招題目,有一個題以前沒有仔細想過,題目我有點兒記不清楚了,大概意思是這樣的:有一個循環的單連結清單,給定該連結清單的尾指針比給定頭指針好麼?

  我的思路:如下圖,這是一個循環單連結清單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!!!!!