單鏈表的面試題

2021-07-23 17:57:53 字數 3053 閱讀 4847

自定義標頭檔案部分:

void deletenottail(pnode pos);//刪除乙個無頭單鏈表的非尾節點

void insertnothead(pnode phead, pnode pos, datatype data);//在無頭單鏈表的乙個非頭節點前插入乙個節點

void josephcircle(pnode* phead, int m);//約瑟夫環

pnode findmidnode(pnode phead);//查詢單鏈表的中間節點,要求只能遍歷一次鍊錶

pnode findlastknode(pnode phead, int k);//查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶

pnode reverselist(pnode phead);//逆置單鏈表

void bubblesort(pnode phead);//氣泡排序

pnode mergelist(pnode plist1, pnode plist2);//合併有序單鏈表,合併完仍有序

int iscross(pnode phead1, pnode phead2);//判斷是否相交

pnode getcrossnode(pnode phead1, pnode phead2);//尋找兩條鍊錶相交的結點

void makecircle(pnode phead);//使煉表成環

int getcirclrlen(pnode pmeetnode);//求煉錶環的長度

int getnode(pnode phead);//一條鍊錶找相交點

pnode hascircle(pnode phead);//判斷鍊錶是否帶環

void unionset(pnode p1, pnode p2);//求兩個已排序單鏈表中相同的資料--列印出來

函式**的實現部分:

void deletenottail(pnode pos)//刪除無頭非尾節點 

else

}void insertnothead(pnode phead, pnode pos, datatype data)//在鍊錶的非頭位置插入節點

else

newnode->next = curnode;

prenode->next = newnode;

}}void josephcircle(pnode* phead, int m)//約瑟夫環

else

lastnode = curnode->next;

curnode->

data

= lastnode->

data;

curnode->next = lastnode->next;

free(curnode->next);

curnode->next =

null;}}

}pnode findmidnode(pnode phead)//查詢乙個單鏈表的中間節點

else

if (phead->next ==

null)

else

return slownode;

}}pnode findlastknode(pnode phead, int k)//查詢鍊錶的倒數第k個節點

else

while (fastnode)

return slownode;

}

} void makecircle(pnode phead)

else

prenode->next = phead;

}}//void reverselist(pnode phead)//逆置單鏈表

////}

pnode reverselist(pnode phead)

return

new;

}void bubblesort(pnode phead)//氣泡排序

curnode = curnode->next;

}tailnode = curnode;

}}pnode mergelist(pnode plist1, pnode plist2)//合併有序單鏈表,合併完仍有序

else

pnode new1 =

new;

while (p1 && p2)

else

}if ((p1 ==

null) && (p2!=

null))

else

if ((p1 !=

null) && (p2 ==

null))

return new1;

}int iscross(pnode phead1, pnode phead2)//判斷是否相交

while (curnode2)

while (phead1)

if (phead1 != phead2)

else

}else

if (phead1 != phead2)

else}}

return-1;

}pnode getcrossnode(pnode phead1, pnode phead2)//尋找相交的結點

while (curnode2)

while (phead1)

if (phead1 != phead2)

else

}else

if (phead1 != phead2)

else}}

}pnode hascircle(pnode phead)//判斷鍊錶是否帶環

}int getcirclrlen(pnode pmeetnode)//求煉錶環的長度

return count;

}int getnode(pnode phead)//一條鍊錶找相交點

if (fastnode != slownode)

return slownode->

data;

}void unionset(pnode p1, pnode p2)

pp2 = pp2->next;

}pp1 = pp1->next;

}}

面試題 單鏈表反轉

問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...

單鏈表 (面試題)

關於單鏈表的基本操作,之前已經總結過了,那些掌握之後算是了解了單鏈表是什麼?不過現在面試的題中,肯定不會只讓你回答單鏈表的基礎操作,總是會改變一些東西,或是擴充套件一下。下面就是一些關於單鏈表的擴充套件內容 include include include pragma warning disable...

單鏈表面試題

1.倒序列印鍊錶 void reverseprint slistnode pfirst 有兩種方法 1.遞迴操作 2.非遞迴操作 2 非遞迴 slistnode pend slistnode pcur pend null while pfirst pend pend pcur printf d pe...