#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data; //链表结点的元素,类型为int
struct LNode *next; //指向下一结点指针
}LNode,*LinkList;
LinkList CreatLink(int n) //创建一个节点数为n的链表(尾插法)
{
LinkList p,Head;
LinkList temp; //始终指向终端节点,开始时指向头结点
int i;
temp = (LinkList)malloc(sizeof(LNode)); //链表头结点
temp->next = NULL;
Head = temp;
if (Head == NULL)
{
return 1;
}
for (i = 0; i < n; ++i)
{
p = (LinkList)malloc(sizeof(LNode)); //创建一个新结点
if (p == NULL)
{
return 1;
}
printf("please input a number:");
scanf("%d",&p->data); //手动输入一个数赋值给新节点的data
p->next = NULL; //新节点的指针指向NULL
temp->next = p; //temp节点的指针指向新结点
temp = p; //temp节点移动到尾节点
}
return Head; //返回链表的头结点
}
int insert(LinkList current,int new_value) //向一个有序链表中插入一个值(new_value)
{
LinkList previous; //指向前一个节点
LinkList new; //要插入的新节点
//比较,如果当前节点小于新节点的值,保存当前节点为前一个节点
while(current->data < new_value)
{
previous = current; //如果当前节点小于新节点,保存当前节点为前一个节点
current = current->next; //移动到下一个节点,作为当前节点
if(current == NULL ) //如果当前节点为尾节点,则无法插入,提示插入失败
{
printf("insert failed \n");
return 0;
}
}
new = (LinkList)malloc(sizeof(LNode)); //创建一个新节点
if(new==NULL)
{
return 1;
}
new->data = new_value; //把要插入的值赋值给新节点的data
new->next = current; //新节点指向当前节点(值大于new_data的那个节点)
previous->next = new; //前一个节点指向要插入的新节点
return 0;
}
void PrintLink(LinkList L) //打印链表
{
LinkList P = L->next;
while (P != NULL)
{
printf("next value :%d \n",P->data);
P = P->next;
}
printf("\n");
}
int main()
{
LinkList L;
L = CreatLink(5);
printf("------insert before------ \n");
PrintLink(L);
insert(L,6);
printf("------insert after------- \n");
PrintLink(L);
return 0;
}
创建、插入、遍历链表
最新推荐文章于 2020-12-06 22:14:43 发布