谷歌的電話面試都是用Google Doc敲代碼,題目本身不是很難,不過想敲出bug-free還是很難的。
直接上題目
A. 鏈表重組
有一個鏈表,裡面用int 存放key,現在給定一個值 val,我們重組鏈表,小於val的節點放在前面。並且相對順序不能變化
- struct TreeNode{
- int value;
- TreeNode *pNext;
- };
-
- int ReconstructLinkedListByValue(TreeNode *head, int val){
- TreeNode *leftPart = NULL, *leftHead = NULL;
- TreeNode *rightPart = NULL, *rightHead = NULL;
-
- while(head){
- if(head->value > val){
- if(leftPart == NULL) leftHead = leftPart = head;
- else{
- leftPart->pNext = head;
- leftPart = head;
- }
- }
- else{
- if(rightPart == NULL) rightHead = rightPart= head;
- else{
- rightPart->pNext = head;
- rightPart= head;
- }
- }
- head = head->pNext;
- }
- if(leftHead == NULL){
- return rightHead;
- }
- else{
- leftPart.pNext = rightHead;
- return leftHead;
- }
- }