鏈表面試題集

2021-08-21 19:49:37 字數 1204 閱讀 8499

1、鍊錶的反轉

注意:1、輸入的煉表頭指標為null或者整個鍊錶只有乙個結點時

2、反轉後鍊錶會不會斷裂

3、返回的反轉之後的頭節點是否為原始鍊錶的尾節點

}2、鍊錶中環的入口結點

環中有4個節點,讓指標p1先走4步,然後指標p2和p1一起走,當p1走到入口節點,p2也與p1會相遇。

就相當於,我要走99步,只要你邁出一步,我補足那1步,我們就會相遇。

那麼如何求環中結點的數目,利用快慢指標,只要他們相遇一定是在環中,只需要,從相遇的節點遍歷,再次回到這個節點,我們便可知道節點的數量。

code:求環中結點的數量

node* count(pnode node)

return null;

}

code:求入口節點

node* findnode(pnode node)

node *fast=node ;

if(fast==null) return null;

for(int i=0;inext;

} node *slow=node;

while(fast!=slow)

return fast;

}

3、刪除鍊錶中重複的節點

code:

void deletep(node** node)

if(!delneed) //如果不需要,一直往下跑

else //如果需要,那麼判斷有沒有重複的數字

if(prev==null)

else

pnode=pnext;

}} }

鏈表面試題

不改變鍊錶結構,從尾到頭列印單鏈表 遞迴實現 void printlistrevers recursively plist phead printf d phead data 當鍊表非常長的時候,遞迴實現的會導致函式呼叫層級很深,可能導致呼叫棧溢位。用棧不會出現此類情況,顯然用棧實現 的魯棒性會好一...

鏈表面試題

從尾到頭列印單鏈表 棧 遞迴 從尾到頭列印鍊錶 includevoid printtailtohead listnode head while s.empty 空間複雜度o n void printtailtoheadr listnode head cout data 刪除乙個無頭單鏈表的非尾結點 ...

鏈表面試題

typedef int datatype typedef struct node node,pnode,plist void initlist plist pplist void display const plist plist void pushback plist pplist,datatyp...