#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 ...