總結了一些鍊錶的知識,包括鍊錶建立,反序,逆序輸出,解決約瑟夫環(報數問題)
#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...