linklist list_get(linklist H,int pos){
linklist p;int i;if(H ==NULL){printf("H is NULL\n");returnNULL;}if(pos ==-1){return H;}if(pos <-1){printf("pos is invalid\n");returnNULL;}
p = H;
i =-1;while(i < pos){
p = p->next;if(p ==NULL){printf("pos is invalid\n");returnNULL;}
i++;}return p;}
2.4、链表指定位置插入
intlist_insert(linklist H,data_t value,int pos){
linklist p;
linklist q;if(H ==NULL){printf("H is NULL\n");return-1;}//1 locate node p (pos-1)
p =list_get(H, pos-1);if(p ==NULL){return-1;}//2 new node qif((q =(linklist)malloc(sizeof(listnode)))==NULL){printf("malloc failed\n");return-1;}
q->data = value;
q->next =NULL;//3 insert
q->next = p->next;
p->next = q;return0;}
2.5、链表指定位置删除
intlist_delete(linklist H,int pos){
linklist p;
linklist q;//1if(H ==NULL){printf("H is NULL\n");return-1;}//2 locate prior
p =list_get(H, pos-1);if(p ==NULL)return-1;if(p->next ==NULL){printf("delete pos is invalid\n");return-1;}//3 update list
q = p->next;
p->next = q->next;//p->next = p->next->next;//4 freeprintf("free:%d\n", q->data);free(q);
q =NULL;return0;}
2.6、链表打印
intlist_show(linklist H){
linklist p;if(H ==NULL){printf("H is NULL\n");return-1;}
p = H;while(p->next !=NULL){printf("%d ", p->next->data);
p = p->next;}puts("");return0;}
2.7、链表释放
linklist list_free(linklist H){
linklist p;if(H ==NULL)returnNULL;
p = H;printf("free:");while(H !=NULL){
p = H;printf("%d ", p->data);free(p);
H = H->next;}puts("");returnNULL;}
2.8、链表翻转
intlist_reverse(linklist H){
linklist p;
linklist q;if(H ==NULL){printf("H is NULL\n");return-1;}if(H->next ==NULL|| H->next->next ==NULL){return0;}
p = H->next->next;
H->next->next =NULL;while(p !=NULL){
q = p;
p = p->next;
q->next = H->next;
H->next = q;}return0;}
2.9、链表最大值
linklist list_adjmax(linklist H,data_t*value){
linklist p, q, r;data_t sum;if(H ==NULL){printf("H is NULL\n");returnNULL;}if(H->next ==NULL|| H->next->next ==NULL|| H->next->next->next ==NULL){return H;}
q = H->next;
p = H->next->next;//p = q->next;
r = q;
sum = q->data + p->data;while(p->next !=NULL){
p = p->next;
q = q->next;if(sum < q->data + p->data){
sum = q->data + p->data;
r = q;}}*value = sum;return r;}
2.10、两链表融合
intlist_merge(linklist H1, linklist H2){
linklist p, q, r;if(H1 ==NULL|| H2 ==NULL){printf("H1 || H2 is NULL\n");return-1;}
p = H1->next;
q = H2->next;
r = H1;
H1->next =NULL;
H2->next =NULL;while(p && q){if(p->data <= q->data){
r->next = p;
p = p->next;
r = r->next;
r->next =NULL;}else{
r ->next = q;
q = q->next;
r = r->next;
r->next =NULL;}}if(p ==NULL){
r->next = q;}else{
r->next = p;}return0;}