面試題 單鏈表的操作2

2021-07-13 08:53:28 字數 1564 閱讀 2026

單鏈表的建立、插入等替他操作見本人部落格:

單鏈表的基本操作 

【面試題】單鏈表的操作1 

介紹了4種有關單鏈表的面試題,對於以下鍊錶要求的實現,解題的思路很重要。例如兩個有序鍊錶的合併,實現約瑟夫環及鍊錶成環問題。

各函式的實現,**如下:

slistnode* mergelist(slistnode* l1, slistnode* l2)//合併兩個有序鍊錶,合併後依然有序

else

//用tail指標進行比較和移動

slistnode* tail = newhead;

while (phead1 && phead2)

else

tail = tail->next;

} //如果兩個鍊錶不一樣長時,將其鏈結在新鍊錶的後面

if (phead1)

tail->next = phead1;

else

tail->next = phead2;

return newhead;

}void bubblesort(slistnode* phead)//氣泡排序單鏈表

cur = cur->next;

next = next->next;

}if (exchange == 0)//如果沒有發生交換,則鍊錶已有序

break;

tail = tail->next;

tmp = cur;//tmp指向cur,即下一趟比較在tmp處結束}}

slistnode* josephcycle(slistnode* phead, int k)//單鏈表實現約瑟夫環

return null;

}//判斷單鏈表是否帶環?若帶環,求環長度,求環入口點

slistnode* checkcycle(slistnode* phead)//檢查是否帶環

return null;

}int getcyclelength(slistnode* meetnode)//求環的長度

while (cur != meetnode);

return count;

}slistnode* getentrynode1(slistnode* phead)//求環的入口位址

return null;

}int slistlength(slistnode* phead)//分別求環形鍊錶被拆成兩條鍊錶的鍊錶長度

return count;

}slistnode* getentrynode2(slistnode* phead)//求環的入口位址---兩個鍊錶相交思想

else

//兩個鍊錶同步前進

while (cur1 != cur2)

return cur2;

}

各函式測試用例如下:

void test10()

void test11()

void test12()

void test13() }

int main()

本文出自 「scen」 部落格,請務必保留此出處

面試題 單鏈表的操作

面試題 單鏈表的操作 1 找出單鏈表的中間節點 2 找出單鏈表的倒數第k個節點 3 判斷單鏈表的是否有環 4 兩個有序的單鏈表的合併 5 單鏈表就地逆置 include include typedef struct node linknode 初始化 void init linknode head ...

單鏈表的面試題

自定義標頭檔案部分 void deletenottail pnode pos 刪除乙個無頭單鏈表的非尾節點 void insertnothead pnode phead,pnode pos,datatype data 在無頭單鏈表的乙個非頭節點前插入乙個節點 void josephcircle pn...

面試題 單鏈表反轉

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