對於單鏈表的使用,最重要的內容就是對於指針的熟練使用,
在這裏我會講到我第一次使用單鏈表時用到的一些基本操作 頭刪,尾刪,頭插,尾插
在後續的文章中會講到一些後續的單鏈表的操作,比如單鏈表的逆序,逆序輸出
#include <stdio.h>
#include <malloc.h>
typedef int Datatype;
typedef struct node {
Datatype data;
struct node* next;
}Node;
//初始化
void Initlist(Node** p) {
*p = NULL;
}
//創建節點
Node* buynode(Datatype data) {
Node* p = (Node*)malloc(sizeof(struct node));
if (NULL == p)
{
return NULL;
}
p->data = data;
p->next = NULL;
return p;
}
//頭插
void pushfront(Node** head, Datatype data) {
Node* p1 = buynode(data);
if (NULL == p1)
{
return;
}
p1->next = (*head);
*head = p1;
}
//尾插
void pushback(Node** head, Datatype data) {
if (NULL == (*head))
{
*head = buynode(data);
}
else
{
Node* p = *head;
while (p->next)
{
p = p->next;
}
p->next = buynode(data);
}
}
//尾刪
void popback(Node** head) {
Node* p1 = NULL;
Node* p = (*head);
if (NULL == p)
{
return;
}
while (p->next)
{
p1 = p;
p = p->next;
}
free(p);
p = NULL;
p1->next = NULL;
}
//頭刪
void popfront(Node** head) {
Node* p1 = NULL;
Node* p = *head;
if (NULL == p)
{
return;
}
else
{
(*head) = (*head)->next;
free(p1);
}
}
//打印
void printlist(Node* head) {
Node* p = head;
while (p)
{
printf("%d--->", p->data);
p = p->next;
}
printf("\n");
}
//銷燬
void deslist(Node** head) {
Node*p = NULL;
p = *head;
Node*newp = NULL;
while (p != NULL)
{
newp = p->next;
free(p);
p = newp;
}
*head = NULL;
}
void test() {
Node* p = NULL;
Initlist(&p);
pushback(&p, 1);
pushback(&p, 2);
pushback(&p, 3);
pushback(&p, 4);
printlist(p);
pushfront(&p, 5);
printlist(p);
popback(&p);
printlist(p);
popfront(&p);
printlist(p);
printlistback(p);
deslist(&p);
}
int main() {
test();
system("pause");
return 0;
}