对于单链表的使用,最重要的内容就是对于指针的熟练使用,
在这里我会讲到我第一次使用单链表时用到的一些基本操作 头删,尾删,头插,尾插
在后续的文章中会讲到一些后续的单链表的操作,比如单链表的逆序,逆序输出
#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;
}