C 单向链表之动态链表:头插法
头插法:在头节点后插入,每插入一个元素,将其作为首节点(头结点后面的第一个节点)。(比尾插法高级!)
一、实现
头插法实现代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data; //数据域:存储数据
struct node * next; //指针域:指向下一个节点(指向谁,就保存了谁的地址)
}Node;
Node * createList();
int main()
{
Node * head = createList();
Node * pHead = head;
pHead = pHead->next;
while (pHead)
{
printf("%d\n",pHead->data);
pHead = pHead->next;
}
return 0;
}
Node * createList()
{
Node *head = (Node*)malloc(sizeof(Node));
if(NULL == head)
exit(-1);
head->next = NULL;
Node *ptr;
int inputData;
scanf_s("%d", &inputData);
while (inputData)
{
ptr = (Node*)malloc(sizeof(Node));
if (NULL == ptr)
exit(-1);
ptr->data = inputData;
ptr->next = head->next;
head->next=ptr;
scanf_s("%d", &inputData);
}
return head;
}
运行结果:
二、程序过程图分析
(1)创建空链表,输入数据不为零创建新节点并存储数据。
(2)头插法
1)插入第一个元素
ptr->next = head->next;
head->next=ptr;
2)插入第二个元素
首先生成新节点
ptr->next = head->next;
head->next=ptr;
3)插入第N个元素,直到输入的数为0为止。