#include<stdio.h>
#include<malloc.h>
typedef struct Node{
int date;//节点数据
struct Node * pNext;//指向下一个节点的指针
}*PNODE,NODE;
PNODE creat_list()//创建链表
{
int len,val,i;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE pTail = pHead;
pTail->pNext=NULL;
printf("please import node namber!");
scanf("%d",&len);
for(i=0;i<len;i++)
{
printf("please import %d value",i+1);
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->date=val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail = pNew;
}
return pHead;
}
int length(PNODE pHead)//获取链表中节点的长度
{
int len=0;
PNODE p = pHead->pNext;
while(p != NULL)
{
len++;
p=p->pNext;
}
return len;
}
void traverse(PNODE pHead)//遍历链表
{
PNODE p =pHead->pNext;
while(NULL != p)
{
printf("%d ",p->date);
p=p->pNext;
}
return;
}
void sort(PNODE pHead)//排序链表
{
int i,j,len =length(pHead);
PNODE p,q;
for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
{
for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
{
if(p->date > q->date)
{
p->date = p->date ^ q->date;
q->date = p->date ^ q->date;
p->date = p->date ^ q->date;
}
}
}
return;
}
int isEmpty(PNODE pHead)//判空链表
{
if(pHead->pNext==NULL)
{
return 1;
}else
{
return 0;
}
}
int insert(PNODE pHead, int pos , int val)//插入节点
{
int i=0;
PNODE p = pHead;
while(p!=NULL && i<pos-1)
{
i++;
p=p->pNext;
}
if(pos<1 || i>pos-1)
{
printf("postion is err!");
exit(-1);
return 0;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
PNODE q =p->pNext;
pNew->date=val;
p->pNext=pNew;
pNew->pNext=q;
return 1;
}
int delete_list(PNODE pHead,int pos, int *val)//删除节点
{
int i=0;
PNODE p = pHead;
while(p->pNext!=NULL && i<pos-1)
{
i++;
p=p->pNext;
}
if(p->pNext ==NULL || i>pos-1)
{
printf("postion err!");
exit(-1);
return 0;
}
PNODE q =p->pNext;
*val = q->date;
p->pNext=p->pNext->pNext;
free(q);
q=NULL;
}
int main(void)
{
int val=0;
PNODE pHead = creat_list();
// delete_list(pHead,1,&val);
insert(pHead,2,100);
traverse(pHead);
return 0;
}