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