當前位置:首頁 » 編程語言 » c語言鏈表逆序原理
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言鏈表逆序原理

發布時間: 2023-01-03 05:20:18

c語言鏈表逆序怎麼理解

扣著的是頭節點(頭子)

車是首節點(首子)

馬是次節點(次子)

牙簽細的是指針指向,香頭發黑的是指向,鐵頭細的是指向。

根據步驟寫程序的偽演算法(3步4循環,7張圖片搞定),如下:


第一個循環把馬弄到車前面,

第二個循環把相弄到馬前面

第三個循環把士弄到相前面

........

直到香指向為空後停止循環。

代碼如下:只需要一個首結點pHead,就能把鏈表找到,並倒置。具體代碼如下

p香=pHead->pNext;

p鐵=p香->pNext;

p香->pNext=NULL;

P香=p鐵

while(p香 !=NULL)

{

p鐵=p香->pNext;

p香->pNext=pHead->pNext;

pHead->pNext=p香;

p香=p鐵;

}


對照偽演算法(三步四循環),和上面的代碼是一一對應的:

第一步:香頭指向首子,鐵頭指向次子

第二步:刪掉首子指向次子(鐵頭所指向的那個子)的牙簽

第三步:香頭跟著鐵頭

以下循環條件:(條件:香頭指向不為空)

{

循環1:鐵頭移動到香頭的下一個指向

循環2:香頭的下一個指向首子

循環3:頭子的下一個跟著香頭

循環4:香頭跟著鐵頭

}

自己用道具操作幾遍,然後把流程背會,以後自己根據流程寫代碼即可。

❷ c語言鏈表逆置詳解

思路 ==》創建一個新的鏈表,然後順序遍歷原鏈表,將其每一項都前插到新鏈表中。這樣得到的新鏈表就是原鏈表的逆向鏈表例子看下面的#include <stdio.h>

//結構體,用整數作數據
typedef struct tNODE
{
int data;
struct tNODE *next;
}NODE;

//刪除鏈表,回收空間
void clear(NODE *head)
{
NODE *p;
while(head)
{
p=head->next;//保存下一個結點的地址
free(head);//刪除最先的一個結點
head=p;//指向下一個結點
}
}

//輸出整個鏈表中的數據
void write(NODE *head)
{
NODE *p;
p=head->next;//因為使用帶頭結點的鏈表,所以要跳過第一個結點
while(p)
{
printf("%d ", p->data);
p=p->next;//後移
}
printf("\n");
}

//鏈表逆序
void reverse(NODE *head)
{
NODE *p, *q, *r;
if(head->next)//至少有一個數據
{
p=head->next;//p指向第一個數據結點
q=p->next;//q指向第二個結點
p->next=NULL;//第一個結點逆序後當然就是最後一個
while(q)
{
r=q->next;//r指向第三個結點
q->next=p;//第二個結點的鏈指針指向第一個
p=q;//p指向第二個結點
q=r;//q指向第三個結點
}
head->next=p;//讓始終沒理的頭結點連到最後一個結點上
}
}

//生成鏈表,以-1表示結束
NODE *create()
{
NODE *h, *t;
int x;
h=malloc(sizeof(NODE));//建立頭結點
t=h;
scanf("%d", &x);
while(x!=-1)
{
t->next=malloc(sizeof(NODE));
t=t->next;
t->data=x;
scanf("%d", &x);
}
t->next=NULL;
return h;
}

int main()
{
NODE *head;
head=create();
write(head);
reverse(head);
write(head);
clear(head);
return 0;
}