單鏈表相關的面試題

2021-08-20 08:25:29 字數 2721 閱讀 7857

slist.h

void printlistfromtail2head(pnode phead);//從尾到頭列印單鏈表

void erasenottailnode(pnode pos);//刪除非尾結點

void insertfront(pnode pos,datatype data);//無頭單鏈表插入結點

void josephcircle(pnode *pphead,size_t m);//約瑟夫環

void reverselist(pnode *pphead);//鍊錶逆置

pnode reverselist_p(pnode phead);//鍊錶逆置(頭插法)

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

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

pnode findlastknode(pnode phead, size_t k);// 查詢單鏈表的倒數第k個結點

int deletelastknode(pnode* pphead,size_t k);//刪除倒數第k個結點

pnode mergeliist(pnode phead1,pnode phead2);//合併兩個有序的單鏈表

pnode hascircle(pnode phead);//判斷單鏈表是否帶環

size_t getcirclelen(pnode phead);//求環的長度

slist.c

void printlistfromtail2head(pnode phead)//列印結點

//採用函式遞迴 1-->2-->3--4-->null 遞迴了5次

//時間複雜度:o(n+1) //空間複雜度:o(n+1)

//迴圈實現

//...}

void insertfront(pnode pos, datatype data)//無頭單鏈表插入結點

void josephcircle(pnode *pphead, size_t m)//約瑟夫環

*pphead = pcur;

}void reverselist(pnode *pphead)//鍊錶逆置 (以下兩種方法均不能處理帶環問題,如果要處理,可先將環拆開,然後按照正常方法進行逆置,最後將頭尾結點指向頭結點即可)

*pphead = ppre; //已經變成頭結點,更新頭結點

}pnode reverselist_p(pnode phead)//鍊錶逆置(帶環:將phead指向pnewhead)

return pnewhead;

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

pcur = pnext;

pnext = pcur->_pnext;

} if (!ischange)

return;

ptail = pcur; }}

pnode findmidllenode(pnode phead)//尋找中間結點

return pslow;

}pnode findlastknode(pnode phead,size_t k)//尋找倒數第k個結點 //時間複雜度:o(n)

//然後同時走

while (pfast->_pnext)

return pslow;

}int deletelastknode(pnode* pphead, size_t k)//刪除倒數第k個結點

while (pfast)

if (pslow == *pphead)

*pphead = pslow->_pnext;

else

ppreslow->_pnext = pslow->_pnext;

free(pslow);

return 1;

}pnode mergeliist(pnode phead1, pnode phead2)//合併兩個有序單鏈表

else

while (pl1 && pl2)

else

ptail = ptail->_pnext;

} if (pl1)

ptail->_pnext = pl1;

if (pl2)

ptail->_pnext = pl2;

return pnewnode;

}pnode hascircle(pnode phead)//判斷單鏈表是否帶環

return 0;

}size_t getcirclelen(pnode phead)//求環的長度(r)

return len;

}

test.c

void testslist5()

void testslist6()//測試約瑟夫環

void testslist7()//鍊錶逆置

void testslist8()//氣泡排序

void testslist9()//尋找倒數第k個結點

deletelastknode(&phead, 6);

slistprint(phead);

deletelastknode(&phead, 2);

slistprint(phead);

}//講解到2017.12.17 15:26

void testslist10()

單鏈表相關的面試題

pragma once include list.h 1.逆序列印單鏈表 template void list printtailtohead node phead 2.刪除無頭節點的單鏈表的非尾節點 template void list delnontailnode node pos 3.無頭單鏈...

單鏈表相關熱點面試題(一)

對於單鏈表相關的問題,往往是面試的熱點,在此我總結了一些單鏈表相關熱點面試題 一 比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?一 順序表的特點是邏輯上相鄰的資料元素,物理儲存位置也相鄰,並且,順序表的儲存空間需要預分配。它的優點是 1 方法簡單,各種高階語言中都有陣列,容易實現。2 不用...

單鏈表詳解以及單鏈表相關面試題總結

目錄 1.單鏈表的定義 2.獲取單鏈表的第i個元素 3.單鏈表的插入操作 4.單鏈表的刪除操作 5.單鏈表的整表刪除 6.判斷兩個單鏈表是否相交 7.如果兩個鍊錶相交,如何尋找相交的節點 8.判斷乙個單鏈表是否有環 9.如果乙個鍊錶有環,如何找到環的入口 10.找到單鏈表中的倒數第k個節點 11.兩...