单链表之无头和有头--逆序
在介紹單鏈表逆序操作之前,首先好好地介紹下有頭與無頭單鏈表的區(qū)別:
一、概念辨析
線性表的插入刪除需要移動大量的元素,因此引入鏈表(本文討論單鏈表)的概念,鏈表元素之間通過“鏈”來鏈接,因此插入和刪除時不需要大量的移動元素,而只需要改變“鏈”的關(guān)系即可。
(1)頭指針:通常使用“頭指針”來標(biāo)識一個鏈表,如單鏈表L,頭指針為NULL的時表示一個空鏈表。
頭結(jié)點(diǎn):在單鏈表的第一個結(jié)點(diǎn)之前附加一個結(jié)點(diǎn),稱為頭結(jié)點(diǎn)。頭結(jié)點(diǎn)的Data域可以不設(shè)任何信息,也可以記錄表長等相關(guān)信息。
注意:無論是否有頭結(jié)點(diǎn),頭指針始終指向鏈表的第一個結(jié)點(diǎn)。如果有頭結(jié)點(diǎn),頭指針指向頭結(jié)點(diǎn)。
(2)引入頭結(jié)點(diǎn)的優(yōu)勢:
剛剛提到,鏈表可以沒有頭結(jié)點(diǎn),但是必須要有頭指針,因?yàn)橐妙^指針來標(biāo)識一個鏈表。設(shè)鏈表的頭指針為Head。除了頭結(jié)點(diǎn)之外,還需要一個指向鏈表一般元素的指針pNode(因?yàn)镠ead只能指向表頭,不能指向其他元素,故需要另設(shè)指針)。
1.單鏈表之有頭–逆序
head頭指針指向鏈表的第一個節(jié)點(diǎn),即是頭結(jié)點(diǎn)。
p_cur指針指向頭結(jié)點(diǎn)的后一個結(jié)點(diǎn),即是首元結(jié)點(diǎn)。
p_next始終指向p_cur所指結(jié)點(diǎn)的下一個結(jié)點(diǎn)。
代碼如下:
int linklist_reverse(node_t **head)
{
node_t *p_cur;
node_t *p_next;
}
2.單鏈表之無頭–逆序
head頭指針指向鏈表的第一個節(jié)點(diǎn),這里就是鏈表存放數(shù)據(jù)的第一個節(jié)點(diǎn)。
p_cur指針指向頭結(jié)點(diǎn)的后一個結(jié)點(diǎn),即是第二個結(jié)點(diǎn)。
p_next始終指向p_cur所指結(jié)點(diǎn)的下一個結(jié)點(diǎn)。
void linklist_reverse(node_t **head)
{
node_t *p_cur = (*head)->next;
node_t *p_next;
}
總結(jié)
以上是生活随笔為你收集整理的单链表之无头和有头--逆序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: enum的介绍以及和#define的区别
- 下一篇: 集训第一天所学