对于链表的插入和删除操作,自己写代码的一般思路是先遍历链表,找到要插入或删除的位置后再进行插入或删除操作,还要进行一系列不合法判断。而这个算法,简短的几行代码基本上就把所有的情况包含进去了,健壮性也很强,分享一下。
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<pos-1) { p=p->pNext; ++i; } if(NULL==p->pNext||i>pos-1) return 0; q=p->pNext; *val=p->pNext->data; p->pNext=p->pNext->pNext; free(q); q=NULL; return 1; }有哪位朋友看懂了这个算法的基本思路,分享一下?