當(dāng)前位置:博客首頁>>C/C++ >> 閱讀正文

又是一個單鏈表的實現(xiàn)(頭插法和尾插法)

作者: 鄭曉 分類: C/C++, 數(shù)據(jù)結(jié)構(gòu) 發(fā)布于: 2017-02-10 10:41 瀏覽:4,869 沒有評論


看了不少資料,之前一直糊涂,感覺剛剛弄明白,所以又寫了一遍單鏈表的實現(xiàn),包括頭插和尾插…C語言的指針果然水深啊。


#include
#include

//定義鏈表節(jié)點結(jié)構(gòu)
struct LinkedList {
int data;
struct LinkedList *next;
};

//定義一個指向struct LinkedList的指針的類型node
typedef struct LinkedList *node;

/**
* 創(chuàng)建一個新節(jié)點
* @return node
*/
node create_node() {
node tmp;
tmp = (node) malloc(sizeof(struct LinkedList));
tmp->next = NULL;
return tmp;
}

/**
* 尾插法 每次插入的數(shù)據(jù)放到鏈表結(jié)尾
*/
void add_node_to_tail(node head, int data) {
node tmp, p;
//創(chuàng)建一個新節(jié)點 并保存入數(shù)據(jù)
tmp = create_node();
tmp->data = data;
//如果是空表 把新節(jié)點直接放到頭節(jié)點之后
if(head->next == NULL) {
head->next = tmp;
} else {
//不是空表時 開始遍歷鏈表至尾端
p = head->next;
while(p->next!= NULL) {
p = p->next;
}
//把新節(jié)點放到尾端
p->next = tmp;
}
}

/**
* 頭插法 每次插入的數(shù)據(jù)放到鏈表開頭
*/
void add_node_to_head(node head, int data) {
node tmp, p;
//創(chuàng)建一個新節(jié)點
tmp = create_node();
tmp->data = data;
//如果是空表 把新節(jié)點直接放到頭節(jié)點之后
if(head->next == NULL) {
head->next = tmp;
} else {
//不是空表時 把新節(jié)點的next指向到原鏈表第一個元素
tmp->next = head->next;
//把頭節(jié)點指向到新節(jié)點
head->next = tmp;
}
}

int main(void) {
node listHead, p;
//創(chuàng)建一個頭節(jié)點
listHead = create_node();
//頭插法 新增數(shù)據(jù)
add_node_to_head(listHead, 10);
add_node_to_head(listHead, 20);
add_node_to_head(listHead, 30);
add_node_to_head(listHead, 40);
//尾插法 新增數(shù)據(jù)
add_node_to_tail(listHead, 100);
add_node_to_tail(listHead, 200);

//遍歷鏈表并打印元素值
p = listHead->next;
while(p) {
printf("%d\n", p->data);
p = p->next;
}

return 0;
}

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://www.yjfs.org.cn/singly-linked-list-head-tail-insert.html

發(fā)表評論

change vcode