個人總結的一些鍊錶知識

2021-06-22 22:31:13 字數 1818 閱讀 7027

總結了一些鍊錶的知識,包括鍊錶建立,反序,逆序輸出,解決約瑟夫環(報數問題)

#include

#include

using namespace std;

typedef struct node

node,*pnode;

//建立鍊錶

node* creat(int n)

pnode start = new (node);

t_head->pnext = start;

pnode tmp; 

start->value = 1;

for (int i=1;i

//最後乙個

start->pnext = null;

return t_head;

}//鍊錶輸出

void pritlist(node* head)

coutpnext)

pnode first = head->pnext;

pnode middle = first->pnext;

//倒序以後原有的第乙個指向的為空

first->pnext = null;

pnode next = null;

while(null !=middle)

head->pnext = first;

return head;

}//建立迴圈鍊錶

node* circlelist(node* head)

if (null == head->pnext)

pnode start = head->pnext;

//找到最後乙個元素

while(start->pnext!= null)

start->pnext = head;

return start->pnext;  

//利用迴圈鍊錶解決約瑟夫環問題

int getnum(node* s)

return s->value;

}/*利用遞迴反序輸出鍊錶元素,是函式呼叫棧儲存的指標。每次遞迴呼叫,函式幀棧裡面都存放了指標。

函式遞迴呼叫的最後一次,head為null,之後函式呼叫棧依次彈出,獲得前面的位址值*/

void reprint(node *head)

}/*利用迴圈實現鍊錶逆序

1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼

2反轉這兩個節點

3倒數第三個和第四個節點重複執行步驟2*/

void inversion_recursion(node* p,node* head)

inversion_recursion(p->pnext,head);

p->pnext->pnext=p;//反轉節點

p->pnext=null;//第乙個節點反轉後其後繼應該為null

int main()  

pnode pl = creat(n); 

pritlist(pl);  

//逆序排列

pritlist(reverse(pl));

inversion_recursion(pl->pnext,pl);

pritlist(pl);

pnode start = pl->pnext;

free(pl);

reprint(start);

//構建迴圈鍊錶,先把頭結點刪掉

pnode p2 = circlelist(start);

//迴圈鍊錶解決

int b = getnum(p2);

coutgetchar();

return 0;  

2012華為機試題目(c/c++)

關於鍊錶的一些總結

1.在鍊錶頭部新增空頭以消除頭部特殊判斷比較常見,用於刪除和新增元素,啞結點的意思就是在head第乙個節點之前設立乙個節點。2.因為鍊錶的操作有限,所以很多時候我們可以把鍊錶中的元素儲存在陣列中,進行操作。3.鍊錶從前往後遍歷元素簡單,但是從後往前遍歷元素確實困難重重,所以我們可以使用棧來儲存資料,...

關於鍊錶的一些操作總結

這是乙個簡單的鍊錶操作問題,在leetcode上面有52.7 的通過率,難度是簡單。但是還是想在這裡基於python做一下總結,順便總結一下鍊錶的各種操作。首先先看一下leetcode上面的題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可...

物件導向個人總結一些易錯知識

一 類的載入 1 同一類的載入順序 先加載入靜態 塊 隨著類的載入而載入 再載入構造 塊 用於多個構造方法中相同的 最後構造方法 2 若乙個子類繼承乙個父類,則在 new子類物件的時候會先載入父類構造器,用 super 呼叫,寫在子類構造方法的第一行 不寫預設為無參構造 例子 class fu st...