又見鍊錶 另一種Creat方式與反轉

2021-09-08 04:09:26 字數 1942 閱讀 6476

作為一種資料結構,鍊錶以其方便的增刪查改功能,實現了無數經典有用的程式。

在之前的帖子裡,我構建鍊錶的方式是建立乙個不儲存資料的head節點,然後通過一邊輸入資料一邊建立結點的方式構建整個鍊錶。

與之前不同的是,這裡建立的是包含資料的頭結點head:

下面是**,包含建立部分,輸出部分,刪除部分,和插入部分。

struct node

;int n = 0; // 結點數

//**********===node_creat**********====//

node *node_creat()

scanf("%d",&p1 -> data);

while(p1 -> data >= 0)

else

p2 = p1;

p1 = (node *)malloc(sizeof(node));

if(p1 == null)

scanf("%d",&p1 -> data);

}p1 = null;

p2 -> next = null;

return head;

}//**********==node_print**********====//

void node_print(node *head)

else

printf("\n");

}}//**********====node_delete()***************//

void node_delete(node *head,int num)

if(num > n) // 結點不存在

n--; // 結點數-1

int i;

for(i = 1; i < num; i++)

if(p1 == head) // 頭節點 即第乙個

else

node_print(head);

}//**********==node_insert()**********==//

void node_insert(node* head,int num,int i_data)

newnode -> data = i_data;

newnode -> next = null;

node *p1,*p2;

p1 = head;

for(int i = 1 ;i < num; i++)

p2 -> next = newnode;

newnode -> next = p1;

n++; // 結點數+1

node_print(head);

}

樣例:

我這裡採用的方法是 改變兩個結點間next指標的指向,原結點next指標指向下乙個結點,反轉後指向前乙個結點。

node* node_reverse(node* head)

return preversedhead;//返回反轉煉表頭指標。

}

大概的乙個流程圖(反轉第乙個結點)

注:紅色箭頭代表pprev,pnext和pnow的移動,藍色代表next指標的指向。

for迴圈的另一種方式

語法 for expr1 expr2 expr3 do done 解釋 expr1 控制變數的初始值 expr2 判定什麼時候退出迴圈 expr3 修正這個變數的值 範例 計算1到100之間的數值的和 這裡面 有倆種方式 最普通的是我們想到的是 1到100之間的數列,另一種是今天的小知識點的運用 這...

另一種尊重

上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...

另一種勝利

另一種勝利 written by allen lee 剛才我的扣殺,出界了5.3厘公尺。雖然很可惜,但還是出界了,請確認下吧。幹 真是的,那些任性的傢伙!但是,到最後還只顧自己網球原則的正直笨蛋,和一定要用迴旋蛇標打中單人區的笨蛋,給我們看了場好比賽啊。龍崎 海棠和幹他們雖然輸了這場比賽,但他們堅持...