最簡單的想法:先遍歷鍊錶統計結點個數,然後結點數/2就是中間結點的位置,再遍歷就可以指向中間結點
如果只能遍歷一次呢?
優化演算法:設定兩個指向第乙個結點的指標,乙個(p)一次走乙個,乙個(q)一次走兩個。當走的快的到達鍊錶尾部(q->next==null ||q->next->next==null)時,慢的就指向中間結點。當然要特別考慮結點個數為0 1 2的情況。
下面是具體實現:(本程式初始化的鍊錶沒有頭結點)
#include
using namespace std;
struct node
};//初始化鍊錶
node* init(int num)
}return head;
}//輸出鍊錶
void print(node* head)
coutreturn mid;
}int main()
}寫這個程式的時候糾結於是否考慮頭結點(上面的程式實現的沒有頭結點的鍊錶)。下面是我對頭結點的認識:
關於頭結點head,目的是為了方便鍊錶的操作,才外設的乙個有指標無資料的結點。
1、頭結點不作為鍊錶的長度;
2、迴圈鍊錶中尾結點的next指向頭結點;
3、鍊錶的第乙個元素為head->next指向值;
4、鍊錶為空即:head->next == null;
若是這麼宣告:l為單鏈表的頭指標,它指向表中第乙個結點。這裡就沒有頭結點。這裡若l=null,表示線性表為空,長度為0。
面試題 騰訊2012面試題
問題描述 例如手機朋友網有n個伺服器,為了方便使用者的訪問會在伺服器上快取資料,因此使用者每次訪問的時候最好能保持同一臺伺服器。已有的做法是根據serveripindex qqnum n 得到請求的伺服器,這種方法很方便將使用者分到不同的伺服器上去。但是如果一台伺服器死掉了,那麼n就變為了n 1,那...
騰訊2012實習生招聘面試題(部分)
題目 選擇題 在如下8 6的矩陣中,請計算從a移動到b一共有多少走法?要求每次只能向上或向右移動一格,並且不能經過p。bpa a 492 b 494 c 496 d 498 解答 這是有關組合數學中排列組合的一道題。從n個元素中任取r個元素一組,若不考慮它們的順序時,則稱為從n中取r的組合,它的方案...
騰訊暑假實習面試題
題目 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。思路 該題目可以先將字串s倒序然後求倒序字串與原來字串的最長公共子串行 動態規劃 dp i j 表示的是str1 0.i 與 str2 0.j 的最長公共子串行的長度 其餘的...