1.设计在无头结点的单链表中删除第i个结点的算法。
[分析]
应判断删除位置的合法性,当 i < 0 或 i > n - 1 时,不允许进行删除操作;
当 i = 0 时,删除第一个结点;
当 0 < i < n 时,允许进行删除操作,但在查找被删除结点时,须用指针记住该结点的前趋结点。
[算法描述]
1 delete(LinkList *q, int i) 2 { 3 //在无头结点的单链表中删除第i个结点 4 LinkList *p, *s; 5 int j; 6 if(i < 0) 7 printf("Can‘t delete."); 8 else if(i == 0) 9 { 10 s = q; 11 q = q -> next; 12 free(s); 13 } 14 else 15 { 16 j = 0; 17 s = q; 18 while((j < i) && (s != NULL)) 19 { 20 p = s; 21 s = s-> next; 22 j ++; 23 } 24 if(s == NULL) 25 printf("Can‘t delete."); 26 else 27 { 28 p -> next = s -> next; 29 free(s); 30 } 31 } 32 }
2.
原文:https://www.cnblogs.com/zhaizong/p/11641425.html