对于链表的插入和删除操作,自己写代码的一般思路是先遍历链表,找到要插入或删除的位置后再进行插入或删除操作,还要进行一系列不合法判断。而这个算法,简短的几行代码基本上就把所有的情况包含进去了,健壮性也很强,分享一下。
typedef struct Node
{
int data; //数据域
struct Node * pNext; //指针域
}*PNODE,NODE;
int main(void)
{
int dat;
PNODE pHead=NULL;
pHead=create_list();
if(delete_list(pHead,3,&dat))
printf("删除的元素是:%d\n",dat);
traverse_list(pHead);//遍历链表
system("pause");
return 0;
}
int insert_list(PNODE pHead,int pos,int val)
{
int i=0;
PNODE p,pNew;
p=pHead;
while(NULL!=p&&i<pos-1)
{
p=p->pNext;
++i;
}
if(NULL==p||i>pos-1)
return 0;
pNew=(PNODE)(malloc(sizeof(NODE)));
pNew->data=val;
pNew->pNext=p->pNext;
p->pNext=pNew;
return 1;
}
int delete_list(PNODE pHead,int pos,int *val)
{
int i=0;
PNODE p,q;
p=pHead;
while(NULL!=p->pNext&&i&