鍊錶操作面試題

2021-07-22 11:54:00 字數 2171 閱讀 5583

#include using namespace std;

struct node

int value;

node *next;

};node* find(node *phead, int t);

//一、刪除鍊錶中某個節點

//思路:先找到要刪除的節點位置

bool deletet(node **phead,int t)

else

else

return true; }}

node* find(node *phead, int val)

phead = phead->next;

} return null;

}//二、在鍊錶中某個元素面前插入乙個元素,如果待查的元素不存在,則不插入

//思路:先根據待查元素找到要插入的位置,然後分頭部插入和中間插入進行考慮

templatevoid list::insert(t oldt, t newt)

node*pre, *cur;

pre = phead;

while (pre->pnext != p)//迴圈結束後pre剛好在p的前面

pre = pre->pnext;

//pre pnew p三個節點都已知,那麼連線無先後順序

pnew->pnext = p;

pre->pnext = pnew; }}

template node* list::find(t value)

p = p->pnext;

} return null;

}//三、尋找單鏈表的中間結點

//方法1、遍歷求長度length 然後再遍歷輸出

//方法2、雙路齊下: p1走兩步 p2走一步; p1走到終點時, p2正好到達中點

node* findmiddle(node *head)

return p2;

}//四、尋找單鏈表中的倒數第k個元素

//方法1、先遍歷一遍 計算長度, 再找出後k個

//方法2、雙路齊下:

// 1.指標 p1 先從位置1開始後移k個位置,則 p1 移動到了位置k+1;

// 2.指標 p2 從位置1開始移動,同時 p1 從位置k+1繼續移動,直到p1=null;

// 設煉表長度為n,p1從位置k+1到p1=null,移動了n+1 - (k+1)=n-k;所以p2也移動了n - k,此時p2的位置是n-k+1,剛好是倒數第k個位置。

node* findkth(node* head, int k)//下標從1開始

while(p1)

return p2;

}//五、從某乙個節點開始翻轉單鏈表

//鍊錶翻**給出乙個鍊錶和乙個數k,比如,鍊錶為1→2→3→4→5→6

//若k = 2,則翻轉後2→1→6→5→4→3;

//若k = 3,翻轉後3→2→1→6→5→4;

//若k = 4,翻轉後4→3→2→1→6→5;

//實質是也是逆置,只不過是兩個鍊錶逆置後再串聯起來。實現如下:

bool rotatelinkedlist(node* &first, int k)//k在[1 、2.....len]取值

if (k > len)

return false;

//第乙個逆置序列

node* pre = first;

node* cur = first->next;

--k;

node* next = cur;//如果這裡寫成node* next = 0;,當k=1時 ,由於沒執行while,next不能指向第二個節點

while (k /*&&cur*/)//可加可不加

node* last = first;//儲存第乙個逆置序列的最後乙個節點

first->next = 0;

first = pre;

//第二個逆置序列

if (next)//這裡加個if語句,是為了當k=6時(最後乙個位置),在完成第乙個逆置序列後next =0,不執行括號裡的語句

link->next = 0;

last->next = pre;//第乙個逆置序列的最後乙個節點與第二個逆置序列的頭節點prev連起來

} return true /*first*/;

}

鍊錶操作面試題

include include include define datetype int typedef struct node node,pnode void printlist pnode head 列印鍊錶 printf null n void bubblesort pnode phead 使用...

鍊錶常用操作及面試題

鍊錶是一種比較基礎的資料結構,雖然在acm比賽中不常用,但是在面試中還是比較常問的,所以拿出來寫了一下,發現很多錯誤,由於操作中用到很多指標,所以不經常寫的話很容易寫錯。這裡寫了一下鍊錶的建立,比較基礎!然後是刪除鍊錶的元素,需要考慮刪除的是否為第乙個元素。然後是找鍊錶的倒數第k個元素,可以用兩個指...

鍊錶基本操作及面試題

標頭檔案 ifndef linked list h define linked list h include using namespace std include typedef int datatype struct node datatype data node prev node next ...