自定義標頭檔案部分:
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...