您的位置:首页 > 理论基础 > 数据结构算法

记录自已学习之单链表(头插)

2017-04-25 06:51 239 查看
前两篇博文已经写过了怎么创建链表和遍历链表,现在就是轮到了插入指针的时候了。插入指针好像有挺多的方式,这次我先来讲的是头插式插入指针。

//创建链表的小函数

#include <stdio.h>

#include <stdlib.h>

typedef struct node

{
int num;
struct node *pNext;

}Node;

//创建节点函数的声明

Node *create_node(int cnt);

//遍历链表的函数声明

void traverse_node(Node *pH);

//头插式插入链表

void insert_head(Node *pH, Node *new);

int main(void)

{
//定义一个头指针,指向第一个节点
Node *pHeader = NULL;

pHeader = (Node *)malloc(sizeof(struct node));
if (NULL == pHeader)
{
printf("malloc failure\n");
return 0;
}

//由于头指针一般不存数据,所以赋值为0
pHeader->num = 0;
insert_head(pHeader, create_node(4));
insert_head(pHeader, create_node(3));
insert_head(pHeader, create_node(2));
insert_head(pHeader, create_node(1));

#if 0
pHeader->pNext = create_node(1);
pHeader->pNext->pNext = create_node(2);
pHeader->pNext->pNext->pNext = create_node(3);

#endif

traverse_node(pHeader);

#if 0
printf("num = %d\n", pHeader->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->pNext->num);

#endif

return 0;

}

//创建节点函数

Node *create_node(int cnt)

{
Node *Tmp = NULL;

Tmp = (Node *)malloc(sizeof(struct node));
if (NULL == Tmp)
{
printf("In create_node, malloc failure\n");
return NULL;
}

//将函数的传参赋值,并将pNext指向NULL
Tmp->num = cnt;
Tmp->pNext = NULL;
return Tmp;

}

//遍历链表的节点

void traverse_node(Node *pH)

{
while ( (pH = pH->pNext) != NULL)
{
printf("num = %d\n", pH->num);
}

}

//头插式插入链表

void insert_head(Node *pH, Node *new)

{
Node *pTmp = NULL;
if (NULL != pH->pNext)
{
pTmp = pH->pNext;
pH->pNext = new;
new->pNext = pTmp;
}
else
{
pH->pNext = new;
}

}

这里最后一个函数就是头插式插入指针的函数,函数是接受两个结构体的参数,一个是头指针,一个是新创建的链表。具体的思路就是先判断传进来的头指针是否只要一个头指针而没节点,如果是的话就直接插入就行了,如果不是就要需要一个中间变量来记录未插入时头指针的后一个节点,然后利用头指针指向新节点,然后新节点指针刚刚保存原来头指针的下一个节点。pTmp是一个创建的变量,用于作中间变量。首先时一个判断if (NULL != pH->pNext),判断头指针有没有节点,如果没有就直接插入,有的话就按照pTmp
= pH->pNext;先用中间变量pTmp来存储头指针的下一个节点,pH->pNext = new;然后用头指针指向新创建的指针,最后让new的pNext指向刚刚存储在中间变量的指针,也就是没插入前的头指针的下一个指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息