单链表的整表创建
step1:确定函数原型:函数返回值:void
函数参数:头指针的地址ListNode **、创建链表节点的个数n
step2:先判断要不要头结点,如果要头结点先创建一个头节点并让头指针指向头节点
step3:利用传进来链表节点的个数n做循环控制的条件,循环创建链表并插入
链表节点的结构
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LinkNode;
利用头插的方式将节点插入到链表当中
/*有头结点版本
*参数1:头指针的地址
*参数2:创建节点的数量
*/
void CreateList(ListNode **head, int n)
{
int i = 0;
LinkNode *temp = NULL;
//先创建头节点
(*head) = (ListNode *)malloc(sizeof(ListNode));
if(head == NULL)
{
return;
}
//初始化头节点
(*head)->next = NULL;
for(i=0; i<n; i++)
{
temp = (LinkNode *)malloc(sizeof(LinkNode));
if(temp == NULL)
{
return;
}
temp->next = (*head)->next;
temp->data = i;
(*head)->next = temp;
}
}
利用尾插的方式将链表插入到节点当中
step1:先生成一个头结点,使头指针指向头结点并初始化头结点指向NULL
step2:利用循环生成节点并从尾部进行插入(所以要定义一个ListNode*)的指针一直指向链表的最后一个节点。
扫描二维码关注公众号,回复:
2660112 查看本文章
void CreateTail(LinkNode **head, int n)
{
LinkNode *temp = NULL;
LinkNode *p = NULL;
int i = 0;
/*生成一个头结点*/
*head = (LinkNode *)malloc(sizeof(LinkNode));
if(*head == NULL)
{
return;
}
(*head)->next = NULL;
temp = *head; //令temp指向头结点
for(i=0; i<n; i++)
{
p = (LinkNode *)malloc(sizeof(LinkNode));
if(*p == NULL)
{
return;
}
p->next = NULL;
P->data= i;
temp->next = p;
temp = p;
}
}
单链表整表删除
step1:函数原型 :函数参数:要删除链表的头指针的地址LinkNode**head
step2:判断*head是否为NULL(即链表是否为空),如果为空则返回
step3:循环遍历链表(以最后一个节点为NULL的条件作为循环结束的条件),然后没访问一个节点就释放一个节点即可(因为此要定义一个临时变量LinkNode*temp 来保存当前节点的下一个节点)
void DeleteLink(LinkNode **head)
{
LinkNode *temp = *head;
LinkNode *Node = NULL;
if(temp ->next == NULL)
{
return;
}
temp = temp->next;
while(temp != NULL)
{
Node = temp->next;
freep(temp);
temp = Node;
}
(*head)->next = NULL;
}