C语言经典算法100例-073-链表逆序插入节点
思路如下:先建立一个尾节点,然后从每次插入时新建一个新节点。这个最好自己画个图,就明白这些操作时咋来了:画吧少年,画完你就明白了
看代码:
//从后往前向链表中插入元素
#include <stdio.h>
#include <stdlib.h>
//定义链表结构
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
int main()
{
link head; //头指针
link tail; //尾指针
link ptr; //当前指针
int i,num; //下标与元素值
//初始化链表 这里是一个只含有尾指针的链表
tail = (link)malloc(sizeof(node));
tail->next = NULL;
ptr = tail; //当前指针先指向尾指针
//向链表中插入元素
printf("Input 5 numbers:\n");
for (i = 0; i < 5; ++i)
{
scanf("%d", &num);
ptr->data = num; //当前节点data赋值
head = (link)malloc(sizeof(node)); //开辟一个头结点
head->next = ptr; //头结点指向当前节点
ptr = head; //当前指针指向头结点
}
ptr = ptr->next; //跳过头结点输出
//输出链表
while (ptr != NULL)
{
printf("%d\n", ptr->data);
ptr = ptr->next;
}
return 0;
}