早上起来写的一个简单的链表的操作。今天是中秋节,祝大家中秋快乐,阖家团圆!
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct St
{
int data;
struct St* pNext;
}NODE,*PNODE;
PNODE creat_List(PNODE pHead);
void travse_List(PNODE pHead);
void insert_List(PNODE pHead,int n);
void delete_List(PNODE pHead,int m);
int main()
{
PNODE pHead = NULL;
int n = 0;
int m = 0;
pHead = creat_List( pHead);//创造节点
travse_List(pHead );//遍历输出
printf("输入在第几个节点前插入");
scanf("%d",&n);
insert_List( pHead,n);//插入节点
travse_List(pHead );
printf("输入第几个节点删除");
scanf("%d",&m);
delete_List( pHead, m);//删除节点
travse_List(pHead );
return 0;
}
PNODE creat_List(PNODE pHead)
{
int len = 0;
int val = 0;
int i ;
pHead = (PNODE)malloc(sizeof(NODE));
if(pHead == NULL)
{
printf("内存分配失败\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("请输入创造的节点数\n");
scanf("%d",&len);
for(i = 0; i < len;i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("节点分配失败\n");
exit(-1);
}
printf("请输入节点的值\n");
scanf("%d",&val);
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void travse_List(PNODE pHead )
{
PNODE p = pHead->pNext;
int val;
while(p != NULL)
{
val = p->data;
printf("%d",val);
p = p->pNext;
}
printf("\n");
}
void insert_List(PNODE pHead,int n)
{
PNODE p = pHead->pNext;
int val;
int j = 1;
while(j < n - 1)
{
j++;
p = p->pNext;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("内存分配失败\n");
exit(-1);
}
printf("请输入插入节点的值\n");
scanf("%d",&val);
pNew->data = val;
pNew->pNext = p->pNext;
p->pNext = pNew;
}
void delete_List(PNODE pHead,int m)
{
PNODE p = pHead->pNext;
int j = 1;
while(j < m - 1)
{
j++;
p = p->pNext;
}
PNODE q = p->pNext;
p->pNext = q->pNext;
free(q);
}
程序执行的结果如下: